1<?php
2
3/**
4 * Observium
5 *
6 *   This file is part of Observium.
7 *
8 * @package    observium
9 * @subpackage discovery
10 * @copyright  (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
11 *
12 */
13
14// Discover an entity by populating/updating a database table and returning an id
15
16function discover_entity($device_id, $entity_type, $data)
17{
18
19    if (is_array($GLOBALS['config']['entities'][$entity_type])) {
20
21        $def = $GLOBALS['config']['entities'][$entity_type];
22        $index = $data[$def['table_fields']['index']];
23        $params = $def['params'];
24
25        if (isset($params['table_fields']['index']) && is_array())
26        {
27
28
29
30        } elseif (isset($params['table_fields']['index'])) {
31
32        } else {
33
34        }
35
36
37
38        if (is_array($GLOBALS['cache'][$def['table']][$index])) {
39            echo 'Exists';
40
41            $db = $GLOBALS['cache'][$def['table']][$index];
42            $id = $db[$def['table_fields']['id']];
43
44            echo 'exists:'.$id.PHP_EOL;
45
46            $update = array();
47            foreach ($params as $param)
48            {
49                if ($data[$param] != $db[$param]) { $update[$param] = $data[$param]; }
50            }
51            if (count($update))
52            {
53                dbUpdate($update, $def['table'], '`'.$def['table_fields']['id'].'` = ?', array($id));
54                echo('U');
55            } else {
56                echo('.');
57            }
58
59        } else {
60
61            echo 'Doesnt Exist';
62
63            $insert = array();
64            $insert['device_id'] = $device_id;
65            foreach ($params as $param)
66            {
67                $insert[$param] = $data[$param];
68                if ($data[$param] == NULL) { $insert[$param] = array('NULL'); }
69            }
70            $id = dbInsert($insert, $def['table']);
71            echo("+");
72
73            $params[$def['table_fields']['id']] = $id;
74
75            // Populate cache with this entry. Maybe we need it.
76            $GLOBALS['cache'][$def['table']][$index] = $params;
77
78        }
79
80    } else {
81
82        print_error("Entity Type does not exist. This is a relatively serious error.");
83
84        return FALSE;
85
86    }
87
88    return $id;
89
90}
91
92
93// Discover WIFI Access Point. Returns ap_id.
94
95function discover_wifi_ap($device_id, $ap)
96{
97
98    $params = array('ap_index', 'ap_number', 'ap_name', 'ap_serial', 'ap_model', 'ap_location', 'ap_fingerprint', 'ap_status');
99
100    if (is_array($GLOBALS['cache']['wifi_aps'][$ap['ap_index']]))
101    {
102        // Database entry exists. Lets update it!
103
104        $ap_db = $GLOBALS['cache']['wifi_aps'][$ap['ap_index']];
105        $ap_id = $ap_db['wifi_ap_id'];
106
107        echo 'exists:'.$ap_id.PHP_EOL;
108
109        $update = array();
110        foreach ($params as $param)
111        {
112            if ($ap[$param] != $ap_db[$param]) { $update[$param] = $ap[$param]; }
113        }
114        if (count($update))
115        {
116            dbUpdate($update, 'wifi_aps', '`wifi_ap_id` = ?', array($ap_db['wifi_ap_id']));
117            echo('U');
118        } else {
119            echo('.');
120        }
121
122    } else {
123
124        // Database entry doesn't exist. Lets create it!
125
126        $insert = array();
127        $insert['device_id'] = $device_id;
128        foreach ($params as $param)
129        {
130            $insert[$param] = $ap[$param];
131            if ($ap[$param] == NULL) { $insert[$param] = array('NULL'); }
132        }
133        $ap_id = dbInsert($insert, 'wifi_aps');
134        echo("+");
135
136        $params['ap_wifi_id'] = $ap_id;
137
138        // Populate cache with this entry. Maybe we need it.
139        $GLOBALS['cache']['wifi_aps'][$ap['ap_index']] = $params;
140
141    }
142
143    return $ap_id;
144
145}
146
147
148function discover_wifi_wlan($device_id, $wlan)
149{
150
151  $params = array('wlan_admin_status', 'wlan_beacon_period', 'wlan_bssid', 'wlan_bss_type', 'wlan_channel', 'wlan_dtim_period', 'wlan_frag_thresh',
152                  'wlan_index', 'wlan_igmp_snoop', 'wlan_name', 'wlan_prot_mode', 'wlan_radio_mode', 'wlan_rts_thresh',
153                  'wlan_ssid', 'wlan_ssid_bcast', 'wlan_vlan_id');
154
155  if (is_array($GLOBALS['cache']['wifi_wlans'][$wlan['wlan_index']]))
156  {
157    // Database entry exists. Lets update it!
158    $wlan_db = $GLOBALS['cache']['wifi_wlans'][$wlan['wlan_index']];
159    $wlan_id = $wlan_db['wlan_id'];
160
161    $update = array();
162    foreach ($params as $param)
163    {
164      if ($wlan[$param] != $wlan_db[$param]) { $update[$param] = $wlan[$param]; }
165    }
166    if (count($update))
167    {
168      dbUpdate($update, 'wifi_wlans', '`wlan_id` = ?', array($wlan_db['wlan_id']));
169      echo('U');
170    } else {
171      echo('.');
172    }
173
174  } else {
175    // Database entry doesn't exist. Lets create it!
176
177    $insert = array();
178    $insert['device_id'] = $device_id;
179    foreach ($params as $param)
180    {
181      $insert[$param] = $wlan[$param];
182      if (is_null($wlan[$param])) { $insert[$param] = array('NULL'); }
183    }
184    $wlan_id = dbInsert($insert, 'wifi_wlans');
185    echo("+");
186
187  }
188
189  return $wlan_id;
190
191}
192
193function discover_wifi_radio($device_id, $radio)
194{
195  $params  = array('radio_ap', 'radio_mib','radio_number', 'radio_util', 'radio_type', 'radio_status', 'radio_clients', 'radio_txpower', 'radio_channel', 'radio_mac', 'radio_protection', 'radio_bsstype');
196
197  if (is_array($GLOBALS['cache']['wifi_radios'][$radio['radio_ap']][$radio['radio_number']])) { $radio_db = $GLOBALS['cache']['wifi_radios'][$radio['radio_ap']][$radio['radio_number']]; }
198
199  if (!isset($radio_db['wifi_radio_id']))
200  {
201    $insert = array();
202    $insert['device_id'] = $device_id;
203    foreach ($params as $param)
204    {
205      $insert[$param] = $radio[$param];
206      if (is_null($radio[$param])) { $insert[$param] = array('NULL'); }
207    }
208    $wifi_radio_id = dbInsert($insert, 'wifi_radios');
209    echo("+");
210  } else {
211    $update = array();
212    foreach ($params as $param)
213    {
214      if ($radio[$param] != $radio_db[$param]) { $update[$param] = $radio[$param]; }
215    }
216    if (count($update))
217    {
218      dbUpdate($update, 'wifi_radios', '`wifi_radio_id` = ?', array($radio_db['wifi_radio_id']));
219      echo('U');
220    } else {
221      echo('.');
222    }
223  }
224
225  $GLOBALS['valid']['wifi']['radio'][$radio['radio_mib']][$wifi_radio_id] = 1; // FIXME. What? How it passed there?
226}
227
228// EOF
229