Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

How do we process and store data?

NOTE - Updated for 1.12.8 with new fields and logic.

Each system (computer, network device, printer, et al) has an entry in the "system" table.
 Each system (from the "system" table) has a an "system_id" column.
 This value is unique - it's an auto incrementing id.
 A system is determined to be unique by a the table below.

A system is audited and the result submitted to the server.
 The first table processed is the "system" table.
 The "system_id" is determined and passed (along with the other details) to each other section (table).
 Every table has two timestamp columns, "first_timestampseen" and "timestamplast_seen".
 The "first_timestampseen" value is populated whenever an insert occurs - hence this value reflects the first time an item was reported in the audit script.
 The "timestamplast_seen" value is inserted when an item is first seen, or updated when an item is seen in subsequent audit script(s).
 There is a an "oa_audit_log" table that contains details of each time an audit is submitted (including timestamp). Each sub-table also contains a 'current' column which is an enum with possible values of 'y' and 'n'.

So, for an example - "hard_drive".

  • The

...

  • system

...

  • .id

...

  • is retrieved, along with the timestamp of the previous audit submission and the "status" column.
  • For each entry in the hard_drive audit result, the database is queried.
  • It checks for hard drive model, serial, index and size.
  • These values vary according to the item being processed - see the

...

  • PHP page at /code_igniter/application/models/

...

  • m_devices_components.php
  • If it gets a match on the above values, combined with component.status = 'y' and the system

...

  • .id and a system.status of "production", then an existing entry exists for this piece of equipment.
  • In the case of hard drives, it simply updates the

...

  • current flag to 'y' to reflect the component is still current

...

  • .
  • If it does not get a match, it does an insert of the relevant details.

So, we can determine if something is currently installed - the timestamps match (on the system table and the relevant item table)current column is 'y'.

We can determine when something was detected - the "first_timestampseen".

We can determine if something was installed after the initial audit - first timestamps seen will be different.

We can determine if something is not currently installed, but previously was - the timestamp on the item is less than the timestamp on the systemcurrent = 'n'.

We can determine the last time we detected an item - the timestamp on the item, when the timestamp is less than the current system timestamplast_seen.

At any given point, we can determine what was on a system - by using the oa_ audit_log table and selecting the relevant components based on timestampsfirst_seen and last_seen.

So, that's how we determine what's on or has been on a system.

How do we determine device uniqueness?

When we receive data about a device we check the following columns for matches. If we get a match and the existing entry has a status of 'production', we update this device.

The code for this currently resides in code_igniter/application/models/m_system.php.

Devices are considered the same if they have the following attributes in common: UUID & hostname, dbus_identifier*, FQDN, serial & device type, MAC address and config item**, ip address and config item**, hostname and config item**.

* In 1.12.8 we use the dbus_uuid in Linux to determine uniqueness. This is being reverted in 1.12.8.1 because ESX does not recreate this identifier upon cloning a mchine, hence possibly causing false positive matching.

** In the configuration of Open-AudIT you can select discovery_hostname_match (and mac, ip) to enable this matching. 

What do we use for a name?

Where possible, the first option will be chosen and where possible on subsequent audits, will be changed to the first option: hostname, dns_hostname, sysName.