Fixed download file canceling
[public/netxms.git] / include / nms_agent.h
1 /*
2 ** NetXMS - Network Management System
3 ** Copyright (C) 2003-2013 Victor Kirhenshtein
4 **
5 ** This program is free software; you can redistribute it and/or modify
6 ** it under the terms of the GNU Lesser General Public License as published by
7 ** the Free Software Foundation; either version 3 of the License, or
8 ** (at your option) any later version.
9 **
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ** GNU General Public License for more details.
14 **
15 ** You should have received a copy of the GNU Lesser General Public License
16 ** along with this program; if not, write to the Free Software
17 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 **
19 ** File: nms_agent.h
20 **
21 **/
22
23 #ifndef _nms_agent_h_
24 #define _nms_agent_h_
25
26 #ifdef _WIN32
27 #ifdef LIBNXAGENT_EXPORTS
28 #define LIBNXAGENT_EXPORTABLE __declspec(dllexport)
29 #else
30 #define LIBNXAGENT_EXPORTABLE __declspec(dllimport)
31 #endif
32 #else /* _WIN32 */
33 #define LIBNXAGENT_EXPORTABLE
34 #endif
35
36
37 #include <nms_common.h>
38 #include <nms_util.h>
39 #include <nxconfig.h>
40 #include <nxdbapi.h>
41 #include <nxcpapi.h>
42
43 /**
44 * Initialization function declaration macro
45 */
46 #if defined(_STATIC_AGENT) || defined(_NETWARE)
47 #define DECLARE_SUBAGENT_ENTRY_POINT(name) extern "C" BOOL NxSubAgentRegister_##name(NETXMS_SUBAGENT_INFO **ppInfo, Config *config)
48 #else
49 #ifdef _WIN32
50 #define DECLSPEC_EXPORT __declspec(dllexport) __cdecl
51 #else
52 #define DECLSPEC_EXPORT
53 #endif
54 #define DECLARE_SUBAGENT_ENTRY_POINT(name) extern "C" BOOL DECLSPEC_EXPORT NxSubAgentRegister(NETXMS_SUBAGENT_INFO **ppInfo, Config *config)
55 #endif
56
57 /**
58 * Constants
59 */
60 #define AGENT_LISTEN_PORT 4700
61 #define AGENT_TUNNEL_PORT 4703
62 #define AGENT_PROTOCOL_VERSION 2
63 #define MAX_RESULT_LENGTH 256
64 #define MAX_CMD_LEN 256
65 #define COMMAND_TIMEOUT 60
66 #define MAX_SUBAGENT_NAME 64
67 #define MAX_INSTANCE_COLUMNS 8
68
69 /**
70 * Agent policy types
71 */
72 #define AGENT_POLICY_CONFIG 1
73 #define AGENT_POLICY_LOG_PARSER 2
74
75 /**
76 * Agent log parser policy folder
77 */
78 #define LOGPARSER_AP_FOLDER _T("logparser_ap")
79 #define CONFIG_AP_FOLDER _T("config_ap")
80
81 /**
82 * Error codes
83 */
84 #define ERR_SUCCESS ((UINT32)0)
85 #define ERR_UNKNOWN_COMMAND ((UINT32)400)
86 #define ERR_AUTH_REQUIRED ((UINT32)401)
87 #define ERR_ACCESS_DENIED ((UINT32)403)
88 #define ERR_UNKNOWN_PARAMETER ((UINT32)404)
89 #define ERR_REQUEST_TIMEOUT ((UINT32)408)
90 #define ERR_AUTH_FAILED ((UINT32)440)
91 #define ERR_ALREADY_AUTHENTICATED ((UINT32)441)
92 #define ERR_AUTH_NOT_REQUIRED ((UINT32)442)
93 #define ERR_INTERNAL_ERROR ((UINT32)500)
94 #define ERR_NOT_IMPLEMENTED ((UINT32)501)
95 #define ERR_OUT_OF_RESOURCES ((UINT32)503)
96 #define ERR_NOT_CONNECTED ((UINT32)900)
97 #define ERR_CONNECTION_BROKEN ((UINT32)901)
98 #define ERR_BAD_RESPONSE ((UINT32)902)
99 #define ERR_IO_FAILURE ((UINT32)903)
100 #define ERR_RESOURCE_BUSY ((UINT32)904)
101 #define ERR_EXEC_FAILED ((UINT32)905)
102 #define ERR_ENCRYPTION_REQUIRED ((UINT32)906)
103 #define ERR_NO_CIPHERS ((UINT32)907)
104 #define ERR_INVALID_PUBLIC_KEY ((UINT32)908)
105 #define ERR_INVALID_SESSION_KEY ((UINT32)909)
106 #define ERR_CONNECT_FAILED ((UINT32)910)
107 #define ERR_MALFORMED_COMMAND ((UINT32)911)
108 #define ERR_SOCKET_ERROR ((UINT32)912)
109 #define ERR_BAD_ARGUMENTS ((UINT32)913)
110 #define ERR_SUBAGENT_LOAD_FAILED ((UINT32)914)
111 #define ERR_FILE_OPEN_ERROR ((UINT32)915)
112 #define ERR_FILE_STAT_FAILED ((UINT32)916)
113 #define ERR_MEM_ALLOC_FAILED ((UINT32)917)
114 #define ERR_FILE_DELETE_FAILED ((UINT32)918)
115 #define ERR_NO_SESSION_AGENT ((UINT32)919)
116 #define ERR_SERVER_ID_UNSET ((UINT32)920)
117 #define ERR_NO_SUCH_INSTANCE ((UINT32)921)
118 #define ERR_OUT_OF_STATE_REQUEST ((UINT32)922)
119 #define ERR_ENCRYPTION_ERROR ((UINT32)923)
120 #define ERR_MALFORMED_RESPONSE ((UINT32)924)
121 #define ERR_INVALID_OBJECT ((UINT32)925)
122 #define ERR_FILE_ALREADY_EXISTS ((UINT32)926)
123 #define ERR_FOLDER_ALREADY_EXISTS ((UINT32)927)
124
125 /**
126 * Bulk data reconciliation DCI processing status codes
127 */
128 #define BULK_DATA_REC_RETRY 0
129 #define BULK_DATA_REC_SUCCESS 1
130 #define BULK_DATA_REC_FAILURE 2
131
132 /**
133 * Max bulk data block size
134 */
135 #define MAX_BULK_DATA_BLOCK_SIZE 8192
136
137 /**
138 * Parameter handler return codes
139 */
140 #define SYSINFO_RC_SUCCESS 0
141 #define SYSINFO_RC_UNSUPPORTED 1
142 #define SYSINFO_RC_ERROR 2
143 #define SYSINFO_RC_NO_SUCH_INSTANCE 3
144
145 /**
146 * WinPerf features
147 */
148 #define WINPERF_AUTOMATIC_SAMPLE_COUNT ((UINT32)0x00000001)
149 #define WINPERF_REMOTE_COUNTER_CONFIG ((UINT32)0x00000002)
150
151 /**
152 * User session states (used by session agents)
153 */
154 #define USER_SESSION_ACTIVE 0
155 #define USER_SESSION_CONNECTED 1
156 #define USER_SESSION_DISCONNECTED 2
157 #define USER_SESSION_IDLE 3
158 #define USER_SESSION_OTHER 4
159
160 /**
161 * Descriptions for common parameters
162 */
163 #define DCIDESC_FS_AVAIL _T("Available space on file system {instance}")
164 #define DCIDESC_FS_AVAILPERC _T("Percentage of available space on file system {instance}")
165 #define DCIDESC_FS_FREE _T("Free space on file system {instance}")
166 #define DCIDESC_FS_FREEPERC _T("Percentage of free space on file system {instance}")
167 #define DCIDESC_FS_TOTAL _T("Total space on file system {instance}")
168 #define DCIDESC_FS_TYPE _T("Type of file system {instance}")
169 #define DCIDESC_FS_USED _T("Used space on file system {instance}")
170 #define DCIDESC_FS_USEDPERC _T("Percentage of used space on file system {instance}")
171 #define DCIDESC_LVM_LV_SIZE _T("Size of logical volume {instance}")
172 #define DCIDESC_LVM_LV_STATUS _T("Status of logical volume {instance}")
173 #define DCIDESC_LVM_PV_FREE _T("Free space on physical volume {instance}")
174 #define DCIDESC_LVM_PV_FREEPERC _T("Percentage of free space on physical volume {instance}")
175 #define DCIDESC_LVM_PV_RESYNC_PART _T("Number of resynchronizing partitions on physical volume {instance}")
176 #define DCIDESC_LVM_PV_STALE_PART _T("Number of stale partitions on physical volume {instance}")
177 #define DCIDESC_LVM_PV_STATUS _T("Status of physical volume {instance}")
178 #define DCIDESC_LVM_PV_TOTAL _T("Total size of physical volume {instance}")
179 #define DCIDESC_LVM_PV_USED _T("Used space on physical volume {instance}")
180 #define DCIDESC_LVM_PV_USEDPERC _T("Percentage of used space on physical volume {instance}")
181 #define DCIDESC_LVM_VG_FREE _T("Free space in volume group {instance}")
182 #define DCIDESC_LVM_VG_FREEPERC _T("Percentage of free space in volume group {instance}")
183 #define DCIDESC_LVM_VG_LVOL_TOTAL _T("Number of logical volumes in volume group {instance}")
184 #define DCIDESC_LVM_VG_PVOL_ACTIVE _T("Number of active physical volumes in volume group {instance}")
185 #define DCIDESC_LVM_VG_PVOL_TOTAL _T("Number of physical volumes in volume group {instance}")
186 #define DCIDESC_LVM_VG_RESYNC_PART _T("Number of resynchronizing partitions in volume group {instance}")
187 #define DCIDESC_LVM_VG_STALE_PART _T("Number of stale partitions in volume group {instance}")
188 #define DCIDESC_LVM_VG_STATUS _T("Status of volume group {instance}")
189 #define DCIDESC_LVM_VG_TOTAL _T("Total size of volume group {instance}")
190 #define DCIDESC_LVM_VG_USED _T("Used space in volume group {instance}")
191 #define DCIDESC_LVM_VG_USEDPERC _T("Percentage of used space in volume group {instance}")
192 #define DCIDESC_NET_INTERFACE_64BITCOUNTERS _T("Is 64bit interface counters supported")
193 #define DCIDESC_NET_INTERFACE_ADMINSTATUS _T("Administrative status of interface {instance}")
194 #define DCIDESC_NET_INTERFACE_BYTESIN _T("Number of input bytes on interface {instance}")
195 #define DCIDESC_NET_INTERFACE_BYTESOUT _T("Number of output bytes on interface {instance}")
196 #define DCIDESC_NET_INTERFACE_DESCRIPTION _T("Description of interface {instance}")
197 #define DCIDESC_NET_INTERFACE_INERRORS _T("Number of input errors on interface {instance}")
198 #define DCIDESC_NET_INTERFACE_LINK _T("Link status for interface {instance}")
199 #define DCIDESC_NET_INTERFACE_MTU _T("MTU for interface {instance}")
200 #define DCIDESC_NET_INTERFACE_OPERSTATUS _T("Operational status of interface {instance}")
201 #define DCIDESC_NET_INTERFACE_OUTERRORS _T("Number of output errors on interface {instance}")
202 #define DCIDESC_NET_INTERFACE_PACKETSIN _T("Number of input packets on interface {instance}")
203 #define DCIDESC_NET_INTERFACE_PACKETSOUT _T("Number of output packets on interface {instance}")
204 #define DCIDESC_NET_INTERFACE_SPEED _T("Speed of interface {instance}")
205 #define DCIDESC_NET_IP_FORWARDING _T("IP forwarding status")
206 #define DCIDESC_NET_IP6_FORWARDING _T("IPv6 forwarding status")
207 #define DCIDESC_NET_RESOLVER_ADDRBYNAME _T("Resolver: address for name {instance}")
208 #define DCIDESC_NET_RESOLVER_NAMEBYADDR _T("Resolver: name for address {instance}")
209 #define DCIDESC_PHYSICALDISK_FIRMWARE _T("Firmware version of hard disk {instance}")
210 #define DCIDESC_PHYSICALDISK_MODEL _T("Model of hard disk {instance}")
211 #define DCIDESC_PHYSICALDISK_SERIALNUMBER _T("Serial number of hard disk {instance}")
212 #define DCIDESC_PHYSICALDISK_SMARTATTR _T("")
213 #define DCIDESC_PHYSICALDISK_SMARTSTATUS _T("Status of hard disk {instance} reported by SMART")
214 #define DCIDESC_PHYSICALDISK_TEMPERATURE _T("Temperature of hard disk {instance}")
215 #define DCIDESC_SYSTEM_CPU_CACHE_SIZE _T("CPU {instance}: cache size (KB)")
216 #define DCIDESC_SYSTEM_CPU_CORE_ID _T("CPU {instance}: core ID")
217 #define DCIDESC_SYSTEM_CPU_COUNT _T("Number of CPU in the system")
218 #define DCIDESC_SYSTEM_CPU_FREQUENCY _T("CPU {instance}: frequency")
219 #define DCIDESC_SYSTEM_CPU_MODEL _T("CPU {instance}: model")
220 #define DCIDESC_SYSTEM_CPU_PHYSICAL_ID _T("CPU {instance}: physical ID")
221 #define DCIDESC_SYSTEM_FQDN _T("Fully qualified domain name")
222 #define DCIDESC_SYSTEM_HOSTNAME _T("Host name")
223 #define DCIDESC_SYSTEM_IS_VIRTUAL _T("Virtual system indicator")
224 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_AVAILABLE _T("Available physical memory")
225 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_AVAILABLE_PCT _T("Percentage of available physical memory")
226 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_BUFFERS _T("Physical memory used for buffers")
227 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_BUFFERS_PCT _T("Percentage of physical memory used for buffers")
228 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_CACHED _T("Physical memory used for cache")
229 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_CACHED_PCT _T("Percentage of physical memory used for cache")
230 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_FREE _T("Free physical memory")
231 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_FREE_PCT _T("Percentage of free physical memory")
232 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_TOTAL _T("Total amount of physical memory")
233 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_USED _T("Used physical memory")
234 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_USED_PCT _T("Percentage of used physical memory")
235 #define DCIDESC_SYSTEM_MEMORY_VIRTUAL_ACTIVE _T("Active virtual memory")
236 #define DCIDESC_SYSTEM_MEMORY_VIRTUAL_ACTIVE_PCT _T("Percentage of active virtual memory")
237 #define DCIDESC_SYSTEM_MEMORY_VIRTUAL_FREE _T("Free virtual memory")
238 #define DCIDESC_SYSTEM_MEMORY_VIRTUAL_FREE_PCT _T("Percentage of free virtual memory")
239 #define DCIDESC_SYSTEM_MEMORY_VIRTUAL_TOTAL _T("Total amount of virtual memory")
240 #define DCIDESC_SYSTEM_MEMORY_VIRTUAL_USED _T("Used virtual memory")
241 #define DCIDESC_SYSTEM_MEMORY_VIRTUAL_USED_PCT _T("Percentage of used virtual memory")
242 #define DCIDESC_SYSTEM_MEMORY_VIRTUAL_AVAILABLE _T("Available virtual memory")
243 #define DCIDESC_SYSTEM_MEMORY_VIRTUAL_AVAILABLE_PCT _T("Percentage of available virtual memory")
244 #define DCIDESC_SYSTEM_MEMORY_SWAP_FREE _T("Free swap space")
245 #define DCIDESC_SYSTEM_MEMORY_SWAP_FREE_PCT _T("Percentage of free swap space")
246 #define DCIDESC_SYSTEM_MEMORY_SWAP_TOTAL _T("Total amount of swap space")
247 #define DCIDESC_SYSTEM_MEMORY_SWAP_USED _T("Used swap space")
248 #define DCIDESC_SYSTEM_MEMORY_SWAP_USED_PCT _T("Percentage of used swap space")
249 #define DCIDESC_SYSTEM_MSGQUEUE_BYTES _T("Message queue {instance}: bytes in queue")
250 #define DCIDESC_SYSTEM_MSGQUEUE_BYTES_MAX _T("Message queue {instance}: maximum allowed bytes in queue")
251 #define DCIDESC_SYSTEM_MSGQUEUE_CHANGE_TIME _T("Message queue {instance}: last change time")
252 #define DCIDESC_SYSTEM_MSGQUEUE_MESSAGES _T("Message queue {instance}: number of messages")
253 #define DCIDESC_SYSTEM_MSGQUEUE_RECV_TIME _T("Message queue {instance}: last receive time")
254 #define DCIDESC_SYSTEM_MSGQUEUE_SEND_TIME _T("Message queue {instance}: last send time")
255 #define DCIDESC_SYSTEM_UNAME _T("System uname")
256 #define DCIDESC_AGENT_ACCEPTEDCONNECTIONS _T("Number of connections accepted by agent")
257 #define DCIDESC_AGENT_ACCEPTERRORS _T("Number of accept() call errors")
258 #define DCIDESC_AGENT_ACTIVECONNECTIONS _T("Number of active connections to agent")
259 #define DCIDESC_AGENT_AUTHENTICATIONFAILURES _T("Number of authentication failures")
260 #define DCIDESC_AGENT_CONFIG_SERVER _T("Configuration server address set on agent startup")
261 #define DCIDESC_AGENT_DATACOLLQUEUESIZE _T("Agent data collector queue size")
262 #define DCIDESC_AGENT_FAILEDREQUESTS _T("Number of failed requests to agent")
263 #define DCIDESC_AGENT_GENERATED_TRAPS _T("Number of traps generated by agent")
264 #define DCIDESC_AGENT_IS_EXT_SUBAGENT_CONNECTED _T("Check if external subagent {instance} is connected")
265 #define DCIDESC_AGENT_IS_SUBAGENT_LOADED _T("Check if subagent {instance} is loaded")
266 #define DCIDESC_AGENT_LAST_TRAP_TIME _T("Timestamp of last generated trap")
267 #define DCIDESC_AGENT_LOCALDB_FAILED_QUERIES _T("Agent local database: failed queries")
268 #define DCIDESC_AGENT_LOCALDB_SLOW_QUERIES _T("Agent local database: long running queries")
269 #define DCIDESC_AGENT_LOCALDB_STATUS _T("Agent local database: status")
270 #define DCIDESC_AGENT_LOCALDB_TOTAL_QUERIES _T("Agent local database: total queries executed")
271 #define DCIDESC_AGENT_LOG_STATUS _T("Agent log status")
272 #define DCIDESC_AGENT_PROCESSEDREQUESTS _T("Number of requests processed by agent")
273 #define DCIDESC_AGENT_PROXY_ACTIVESESSIONS _T("Number of active proxy sessions")
274 #define DCIDESC_AGENT_PROXY_CONNECTIONREQUESTS _T("Number of proxy connection requests")
275 #define DCIDESC_AGENT_PROXY_ISENABLED _T("Check if agent proxy is enabled")
276 #define DCIDESC_AGENT_REGISTRAR _T("Registrar server address set on agent startup")
277 #define DCIDESC_AGENT_REJECTEDCONNECTIONS _T("Number of connections rejected by agent")
278 #define DCIDESC_AGENT_SENT_TRAPS _T("Number of traps successfully sent to server")
279 #define DCIDESC_AGENT_SNMP_ISPROXYENABLED _T("Check if SNMP proxy is enabled")
280 #define DCIDESC_AGENT_SNMP_REQUESTS _T("Number of SNMP requests sent")
281 #define DCIDESC_AGENT_SNMP_RESPONSES _T("Number of SNMP responses received")
282 #define DCIDESC_AGENT_SNMP_SERVERREQUESTS _T("Number of SNMP proxy requests received from server")
283 #define DCIDESC_AGENT_SOURCEPACKAGESUPPORT _T("Check if source packages are supported")
284 #define DCIDESC_AGENT_SUPPORTEDCIPHERS _T("List of ciphers supported by agent")
285 #define DCIDESC_AGENT_SYSLOGPROXY_ISENABLED _T("Check if syslog proxy is enabled")
286 #define DCIDESC_AGENT_SYSLOGPROXY_RECEIVEDMSGS _T("Number of syslog messages received by agent")
287 #define DCIDESC_AGENT_SYSLOGPROXY_QUEUESIZE _T("Agent syslog proxy queue size")
288 #define DCIDESC_AGENT_THREADPOOL_ACTIVEREQUESTS _T("Agent thread pool {instance}: active requests")
289 #define DCIDESC_AGENT_THREADPOOL_CURRSIZE _T("Agent thread pool {instance}: current size")
290 #define DCIDESC_AGENT_THREADPOOL_LOAD _T("Agent thread pool {instance}: current load")
291 #define DCIDESC_AGENT_THREADPOOL_LOADAVG _T("Agent thread pool {instance}: load average (1 minute)")
292 #define DCIDESC_AGENT_THREADPOOL_LOADAVG_5 _T("Agent thread pool {instance}: load average (5 minutes)")
293 #define DCIDESC_AGENT_THREADPOOL_LOADAVG_15 _T("Agent thread pool {instance}: load average (15 minutes)")
294 #define DCIDESC_AGENT_THREADPOOL_MAXSIZE _T("Agent thread pool {instance}: max size")
295 #define DCIDESC_AGENT_THREADPOOL_MINSIZE _T("Agent thread pool {instance}: min size")
296 #define DCIDESC_AGENT_THREADPOOL_USAGE _T("Agent thread pool {instance}: usage")
297 #define DCIDESC_AGENT_TIMEDOUTREQUESTS _T("Number of timed out requests to agent")
298 #define DCIDESC_AGENT_UNSUPPORTEDREQUESTS _T("Number of requests for unsupported parameters")
299 #define DCIDESC_AGENT_UPTIME _T("Agent's uptime")
300 #define DCIDESC_AGENT_VERSION _T("Agent's version")
301 #define DCIDESC_FILE_COUNT _T("Number of files {instance}")
302 #define DCIDESC_FILE_FOLDERCOUNT _T("Number of folders {instance}")
303 #define DCIDESC_FILE_HASH_CRC32 _T("CRC32 checksum of {instance}")
304 #define DCIDESC_FILE_HASH_MD5 _T("MD5 hash of {instance}")
305 #define DCIDESC_FILE_HASH_SHA1 _T("SHA1 hash of {instance}")
306 #define DCIDESC_FILE_SIZE _T("Size of file {instance}")
307 #define DCIDESC_FILE_TIME_ACCESS _T("Time of last access to file {instance}")
308 #define DCIDESC_FILE_TIME_CHANGE _T("Time of last status change of file {instance}")
309 #define DCIDESC_FILE_TIME_MODIFY _T("Time of last modification of file {instance}")
310 #define DCIDESC_SYSTEM_CURRENTTIME _T("Current system time")
311 #define DCIDESC_SYSTEM_PLATFORMNAME _T("Platform name")
312 #define DCIDESC_PROCESS_COUNT _T("Number of {instance} processes")
313 #define DCIDESC_PROCESS_COUNTEX _T("Number of {instance} processes (extended)")
314 #define DCIDESC_PROCESS_CPUTIME _T("Total execution time for process {instance}")
315 #define DCIDESC_PROCESS_GDIOBJ _T("GDI objects used by process {instance}")
316 #define DCIDESC_PROCESS_HANDLES _T("Number of handles in process {instance}")
317 #define DCIDESC_PROCESS_IO_OTHERB _T("")
318 #define DCIDESC_PROCESS_IO_OTHEROP _T("")
319 #define DCIDESC_PROCESS_IO_READB _T("")
320 #define DCIDESC_PROCESS_IO_READOP _T("")
321 #define DCIDESC_PROCESS_IO_WRITEB _T("")
322 #define DCIDESC_PROCESS_IO_WRITEOP _T("")
323 #define DCIDESC_PROCESS_KERNELTIME _T("Total execution time in kernel mode for process {instance}")
324 #define DCIDESC_PROCESS_PAGEFAULTS _T("Page faults for process {instance}")
325 #define DCIDESC_PROCESS_SYSCALLS _T("Number of system calls made by process {instance}")
326 #define DCIDESC_PROCESS_THREADS _T("Number of threads in process {instance}")
327 #define DCIDESC_PROCESS_USEROBJ _T("USER objects used by process {instance}")
328 #define DCIDESC_PROCESS_USERTIME _T("Total execution time in user mode for process {instance}")
329 #define DCIDESC_PROCESS_VMSIZE _T("Virtual memory used by process {instance}")
330 #define DCIDESC_PROCESS_WKSET _T("Physical memory used by process {instance}")
331 #define DCIDESC_PROCESS_ZOMBIE_COUNT _T("Number of {instance} zombie processes")
332 #define DCIDESC_SYSTEM_APPADDRESSSPACE _T("Address space available to applications (MB)")
333 #define DCIDESC_SYSTEM_CONNECTEDUSERS _T("Number of logged in users")
334 #define DCIDESC_SYSTEM_HANDLECOUNT _T("Total number of handles")
335 #define DCIDESC_SYSTEM_PROCESSCOUNT _T("Total number of processes")
336 #define DCIDESC_SYSTEM_SERVICESTATE _T("State of {instance} service")
337 #define DCIDESC_SYSTEM_THREADCOUNT _T("Total number of threads")
338 #define DCIDESC_PDH_COUNTERVALUE _T("Value of PDH counter {instance}")
339 #define DCIDESC_PDH_VERSION _T("Version of PDH.DLL")
340 #define DCIDESC_SYSTEM_UPTIME _T("System uptime")
341
342 #define DCIDESC_SYSTEM_CPU_LOADAVG _T("Average CPU load for last minute")
343 #define DCIDESC_SYSTEM_CPU_LOADAVG5 _T("Average CPU load for last 5 minutes")
344 #define DCIDESC_SYSTEM_CPU_LOADAVG15 _T("Average CPU load for last 15 minutes")
345
346 #define DCIDESC_SYSTEM_CPU_INTERRUPTS _T("CPU interrupt count")
347 #define DCIDESC_SYSTEM_CPU_INTERRUPTS_EX _T("CPU {instance} interrupt count")
348 #define DCIDESC_SYSTEM_CPU_CONTEXT_SWITCHES _T("CPU context switch count")
349
350 #define DCIDESC_SYSTEM_CPU_USAGE_EX _T("Average CPU {instance} utilization for last minute")
351 #define DCIDESC_SYSTEM_CPU_USAGE5_EX _T("Average CPU {instance} utilization for last 5 minutes")
352 #define DCIDESC_SYSTEM_CPU_USAGE15_EX _T("Average CPU {instance} utilization for last 15 minutes")
353 #define DCIDESC_SYSTEM_CPU_USAGE _T("Average CPU utilization for last minute")
354 #define DCIDESC_SYSTEM_CPU_USAGE5 _T("Average CPU utilization for last 5 minutes")
355 #define DCIDESC_SYSTEM_CPU_USAGE15 _T("Average CPU utilization for last 15 minutes")
356 #define DCIDESC_SYSTEM_CPU_USAGECURR _T("Current CPU utilization")
357 #define DCIDESC_SYSTEM_CPU_USAGECURR_EX _T("Current CPU {instance} utilization")
358
359 #define DCIDESC_SYSTEM_CPU_USAGE_USER_EX _T("Average CPU {instance} utilization (user) for last minute")
360 #define DCIDESC_SYSTEM_CPU_USAGE5_USER_EX _T("Average CPU {instance} utilization (user) for last 5 minutes")
361 #define DCIDESC_SYSTEM_CPU_USAGE15_USER_EX _T("Average CPU {instance} utilization (user) for last 15 minutes")
362 #define DCIDESC_SYSTEM_CPU_USAGE_USER _T("Average CPU utilization (user) for last minute")
363 #define DCIDESC_SYSTEM_CPU_USAGE5_USER _T("Average CPU utilization (user) for last 5 minutes")
364 #define DCIDESC_SYSTEM_CPU_USAGE15_USER _T("Average CPU utilization (user) for last 15 minutes")
365 #define DCIDESC_SYSTEM_CPU_USAGECURR_USER _T("Current CPU utilization (user)")
366 #define DCIDESC_SYSTEM_CPU_USAGECURR_USER_EX _T("Current CPU {instance} utilization (user)")
367
368 #define DCIDESC_SYSTEM_CPU_USAGE_NICE_EX _T("Average CPU {instance} utilization (nice) for last minute")
369 #define DCIDESC_SYSTEM_CPU_USAGE5_NICE_EX _T("Average CPU {instance} utilization (nice) for last 5 minutes")
370 #define DCIDESC_SYSTEM_CPU_USAGE15_NICE_EX _T("Average CPU {instance} utilization (nice) for last 15 minutes")
371 #define DCIDESC_SYSTEM_CPU_USAGE_NICE _T("Average CPU utilization (nice) for last minute")
372 #define DCIDESC_SYSTEM_CPU_USAGE5_NICE _T("Average CPU utilization (nice) for last 5 minutes")
373 #define DCIDESC_SYSTEM_CPU_USAGE15_NICE _T("Average CPU utilization (nice) for last 15 minutes")
374 #define DCIDESC_SYSTEM_CPU_USAGECURR_NICE _T("Current CPU utilization (nice)")
375 #define DCIDESC_SYSTEM_CPU_USAGECURR_NICE_EX _T("Current CPU {instance} utilization (nice)")
376
377 #define DCIDESC_SYSTEM_CPU_USAGE_SYSTEM_EX _T("Average CPU {instance} utilization (system) for last minute")
378 #define DCIDESC_SYSTEM_CPU_USAGE5_SYSTEM_EX _T("Average CPU {instance} utilization (system) for last 5 minutes")
379 #define DCIDESC_SYSTEM_CPU_USAGE15_SYSTEM_EX _T("Average CPU {instance} utilization (system) for last 15 minutes")
380 #define DCIDESC_SYSTEM_CPU_USAGE_SYSTEM _T("Average CPU utilization (system) for last minute")
381 #define DCIDESC_SYSTEM_CPU_USAGE5_SYSTEM _T("Average CPU utilization (system) for last 5 minutes")
382 #define DCIDESC_SYSTEM_CPU_USAGE15_SYSTEM _T("Average CPU utilization (system) for last 15 minutes")
383 #define DCIDESC_SYSTEM_CPU_USAGECURR_SYSTEM _T("Current CPU utilization (system)")
384 #define DCIDESC_SYSTEM_CPU_USAGECURR_SYSTEM_EX _T("Current CPU {instance} utilization (system)")
385
386 #define DCIDESC_SYSTEM_CPU_USAGE_IDLE_EX _T("Average CPU {instance} utilization (idle) for last minute")
387 #define DCIDESC_SYSTEM_CPU_USAGE5_IDLE_EX _T("Average CPU {instance} utilization (idle) for last 5 minutes")
388 #define DCIDESC_SYSTEM_CPU_USAGE15_IDLE_EX _T("Average CPU {instance} utilization (idle) for last 15 minutes")
389 #define DCIDESC_SYSTEM_CPU_USAGE_IDLE _T("Average CPU utilization (idle) for last minute")
390 #define DCIDESC_SYSTEM_CPU_USAGE5_IDLE _T("Average CPU utilization (idle) for last 5 minutes")
391 #define DCIDESC_SYSTEM_CPU_USAGE15_IDLE _T("Average CPU utilization (idle) for last 15 minutes")
392 #define DCIDESC_SYSTEM_CPU_USAGECURR_IDLE _T("Current CPU utilization (idle)")
393 #define DCIDESC_SYSTEM_CPU_USAGECURR_IDLE_EX _T("Current CPU {instance} utilization (idle)")
394
395 #define DCIDESC_SYSTEM_CPU_USAGE_IOWAIT_EX _T("Average CPU {instance} utilization (iowait) for last minute")
396 #define DCIDESC_SYSTEM_CPU_USAGE5_IOWAIT_EX _T("Average CPU {instance} utilization (iowait) for last 5 minutes")
397 #define DCIDESC_SYSTEM_CPU_USAGE15_IOWAIT_EX _T("Average CPU {instance} utilization (iowait) for last 15 minutes")
398 #define DCIDESC_SYSTEM_CPU_USAGE_IOWAIT _T("Average CPU utilization (iowait) for last minute")
399 #define DCIDESC_SYSTEM_CPU_USAGE5_IOWAIT _T("Average CPU utilization (iowait) for last 5 minutes")
400 #define DCIDESC_SYSTEM_CPU_USAGE15_IOWAIT _T("Average CPU utilization (iowait) for last 15 minutes")
401 #define DCIDESC_SYSTEM_CPU_USAGECURR_IOWAIT _T("Current CPU utilization (iowait)")
402 #define DCIDESC_SYSTEM_CPU_USAGECURR_IOWAIT_EX _T("Current CPU {instance} utilization (iowait)")
403
404 #define DCIDESC_SYSTEM_CPU_USAGE_IRQ_EX _T("Average CPU {instance} utilization (irq) for last minute")
405 #define DCIDESC_SYSTEM_CPU_USAGE5_IRQ_EX _T("Average CPU {instance} utilization (irq) for last 5 minutes")
406 #define DCIDESC_SYSTEM_CPU_USAGE15_IRQ_EX _T("Average CPU {instance} utilization (irq) for last 15 minutes")
407 #define DCIDESC_SYSTEM_CPU_USAGE_IRQ _T("Average CPU utilization (irq) for last minute")
408 #define DCIDESC_SYSTEM_CPU_USAGE5_IRQ _T("Average CPU utilization (irq) for last 5 minutes")
409 #define DCIDESC_SYSTEM_CPU_USAGE15_IRQ _T("Average CPU utilization (irq) for last 15 minutes")
410 #define DCIDESC_SYSTEM_CPU_USAGECURR_IRQ _T("Current CPU utilization (irq)")
411 #define DCIDESC_SYSTEM_CPU_USAGECURR_IRQ_EX _T("Current CPU {instance} utilization (irq)")
412
413 #define DCIDESC_SYSTEM_CPU_USAGE_SOFTIRQ_EX _T("Average CPU {instance} utilization (softirq) for last minute")
414 #define DCIDESC_SYSTEM_CPU_USAGE5_SOFTIRQ_EX _T("Average CPU {instance} utilization (softirq) for last 5 minutes")
415 #define DCIDESC_SYSTEM_CPU_USAGE15_SOFTIRQ_EX _T("Average CPU {instance} utilization (softirq) for last 15 minutes")
416 #define DCIDESC_SYSTEM_CPU_USAGE_SOFTIRQ _T("Average CPU utilization (softirq) for last minute")
417 #define DCIDESC_SYSTEM_CPU_USAGE5_SOFTIRQ _T("Average CPU utilization (softirq) for last 5 minutes")
418 #define DCIDESC_SYSTEM_CPU_USAGE15_SOFTIRQ _T("Average CPU utilization (softirq) for last 15 minutes")
419 #define DCIDESC_SYSTEM_CPU_USAGECURR_SOFTIRQ _T("Current CPU utilization (softirq)")
420 #define DCIDESC_SYSTEM_CPU_USAGECURR_SOFTIRQ_EX _T("Current CPU {instance} utilization (softirq)")
421
422 #define DCIDESC_SYSTEM_CPU_USAGE_STEAL_EX _T("Average CPU {instance} utilization (steal) for last minute")
423 #define DCIDESC_SYSTEM_CPU_USAGE5_STEAL_EX _T("Average CPU {instance} utilization (steal) for last 5 minutes")
424 #define DCIDESC_SYSTEM_CPU_USAGE15_STEAL_EX _T("Average CPU {instance} utilization (steal) for last 15 minutes")
425 #define DCIDESC_SYSTEM_CPU_USAGE_STEAL _T("Average CPU utilization (steal) for last minute")
426 #define DCIDESC_SYSTEM_CPU_USAGE5_STEAL _T("Average CPU utilization (steal) for last 5 minutes")
427 #define DCIDESC_SYSTEM_CPU_USAGE15_STEAL _T("Average CPU utilization (steal) for last 15 minutes")
428 #define DCIDESC_SYSTEM_CPU_USAGECURR_STEAL _T("Current CPU utilization (steal)")
429 #define DCIDESC_SYSTEM_CPU_USAGECURR_STEAL_EX _T("Current CPU {instance} utilization (steal)")
430
431 #define DCIDESC_SYSTEM_CPU_USAGE_GUEST_EX _T("Average CPU {instance} utilization (guest) for last minute")
432 #define DCIDESC_SYSTEM_CPU_USAGE5_GUEST_EX _T("Average CPU {instance} utilization (guest) for last 5 minutes")
433 #define DCIDESC_SYSTEM_CPU_USAGE15_GUEST_EX _T("Average CPU {instance} utilization (guest) for last 15 minutes")
434 #define DCIDESC_SYSTEM_CPU_USAGE_GUEST _T("Average CPU utilization (guest) for last minute")
435 #define DCIDESC_SYSTEM_CPU_USAGE5_GUEST _T("Average CPU utilization (guest) for last 5 minutes")
436 #define DCIDESC_SYSTEM_CPU_USAGE15_GUEST _T("Average CPU utilization (guest) for last 15 minutes")
437 #define DCIDESC_SYSTEM_CPU_USAGECURR_GUEST _T("Current CPU utilization (guest)")
438 #define DCIDESC_SYSTEM_CPU_USAGECURR_GUEST_EX _T("Current CPU {instance} utilization (guest)")
439
440 #define DCIDESC_SYSTEM_IO_DISKQUEUE _T("Average disk queue length for last minute")
441 #define DCIDESC_SYSTEM_IO_DISKQUEUE_MIN _T("Minimum disk queue length for last minute")
442 #define DCIDESC_SYSTEM_IO_DISKQUEUE_MAX _T("Maximum disk queue length for last minute")
443 #define DCIDESC_SYSTEM_IO_DISKQUEUE_EX _T("Average disk queue length of device {instance} for last minute")
444 #define DCIDESC_SYSTEM_IO_DISKQUEUE_EX_MIN _T("Minimum disk queue length of device {instance} for last minute")
445 #define DCIDESC_SYSTEM_IO_DISKQUEUE_EX_MAX _T("Maximum disk queue length of device {instance} for last minute")
446 #define DCIDESC_SYSTEM_IO_DISKTIME _T("Percent of CPU time spent on I/O for last minute")
447 #define DCIDESC_SYSTEM_IO_DISKTIME_EX _T("Percent of CPU time spent on I/O on device {instance} for last minute")
448 #define DCIDESC_SYSTEM_IO_WAITTIME _T("Average I/O request wait time")
449 #define DCIDESC_SYSTEM_IO_WAITTIME_EX _T("Average I/O request wait time for device {instance}")
450 #define DCIDESC_SYSTEM_IO_READS _T("Average number of read operations for last minute")
451 #define DCIDESC_SYSTEM_IO_READS_MIN _T("Minimum number of read operations for last minute")
452 #define DCIDESC_SYSTEM_IO_READS_MAX _T("Maximum number of read operations for last minute")
453 #define DCIDESC_SYSTEM_IO_READS_EX _T("Average number of read operations on device {instance} for last minute")
454 #define DCIDESC_SYSTEM_IO_READS_EX_MIN _T("Minimum number of read operations on device {instance} for last minute")
455 #define DCIDESC_SYSTEM_IO_READS_EX_MAX _T("Maximum number of read operations on device {instance} for last minute")
456 #define DCIDESC_SYSTEM_IO_WRITES _T("Average number of write operations for last minute")
457 #define DCIDESC_SYSTEM_IO_WRITES_MIN _T("Minimum number of write operations for last minute")
458 #define DCIDESC_SYSTEM_IO_WRITES_MAX _T("Maximum number of write operations for last minute")
459 #define DCIDESC_SYSTEM_IO_WRITES_EX _T("Average number of write operations on device {instance} for last minute")
460 #define DCIDESC_SYSTEM_IO_WRITES_EX_MIN _T("Minimum number of write operations on device {instance} for last minute")
461 #define DCIDESC_SYSTEM_IO_WRITES_EX_MAX _T("Maximum number of write operations on device {instance} for last minute")
462 #define DCIDESC_SYSTEM_IO_XFERS _T("Average number of I/O transfers for last minute")
463 #define DCIDESC_SYSTEM_IO_XFERS_MIN _T("Minimum number of I/O transfers for last minute")
464 #define DCIDESC_SYSTEM_IO_XFERS_MAX _T("Maximum number of I/O transfers for last minute")
465 #define DCIDESC_SYSTEM_IO_XFERS_EX _T("Average number of I/O transfers on device {instance} for last minute")
466 #define DCIDESC_SYSTEM_IO_XFERS_EX_MIN _T("Minimum number of I/O transfers on device {instance} for last minute")
467 #define DCIDESC_SYSTEM_IO_XFERS_EX_MAX _T("Maximum number of I/O transfers on device {instance} for last minute")
468 #define DCIDESC_SYSTEM_IO_BYTEREADS _T("Average number of bytes read for last minute")
469 #define DCIDESC_SYSTEM_IO_BYTEREADS_MIN _T("Minimum number of bytes read for last minute")
470 #define DCIDESC_SYSTEM_IO_BYTEREADS_MAX _T("Maximum number of bytes read for last minute")
471 #define DCIDESC_SYSTEM_IO_BYTEREADS_EX _T("Average number of bytes read on device {instance} for last minute")
472 #define DCIDESC_SYSTEM_IO_BYTEREADS_EX_MIN _T("Minimum number of bytes read on device {instance} for last minute")
473 #define DCIDESC_SYSTEM_IO_BYTEREADS_EX_MAX _T("Maximum number of bytes read on device {instance} for last minute")
474 #define DCIDESC_SYSTEM_IO_BYTEWRITES _T("Average number of bytes written for last minute")
475 #define DCIDESC_SYSTEM_IO_BYTEWRITES_MIN _T("Minimum number of bytes written for last minute")
476 #define DCIDESC_SYSTEM_IO_BYTEWRITES_MAX _T("Maximum number of bytes written for last minute")
477 #define DCIDESC_SYSTEM_IO_BYTEWRITES_EX _T("Average number of bytes written on device {instance} for last minute")
478 #define DCIDESC_SYSTEM_IO_BYTEWRITES_EX_MIN _T("Minimum number of bytes written on device {instance} for last minute")
479 #define DCIDESC_SYSTEM_IO_BYTEWRITES_EX_MAX _T("Maximum number of bytes written on device {instance} for last minute")
480 #define DCIDESC_SYSTEM_IO_OPENFILES _T("Number of open files")
481
482
483 #define DCIDESC_DEPRECATED _T("<deprecated>")
484
485
486 #define DCTDESC_AGENT_SESSION_AGENTS _T("Registered session agents")
487 #define DCTDESC_AGENT_SUBAGENTS _T("Loaded subagents")
488 #define DCTDESC_FILESYSTEM_VOLUMES _T("File system volumes")
489 #define DCTDESC_LVM_VOLUME_GROUPS _T("LVM volume groups")
490 #define DCTDESC_LVM_LOGICAL_VOLUMES _T("Logical volumes in volume group {instance}")
491 #define DCTDESC_LVM_PHYSICAL_VOLUMES _T("Physical volumes in volume group {instance}")
492 #define DCTDESC_SYSTEM_INSTALLED_PRODUCTS _T("Installed products")
493 #define DCTDESC_SYSTEM_OPEN_FILES _T("Open files")
494 #define DCTDESC_SYSTEM_PROCESSES _T("Processes")
495
496 /**
497 * Class that stores information about file that will be received
498 */
499 class LIBNXAGENT_EXPORTABLE DownloadFileInfo
500 {
501 protected:
502 TCHAR *m_fileName;
503 time_t m_lastModTime;
504 int m_file;
505 StreamCompressor *m_compressor; // stream compressor for file transfer
506
507 public:
508 DownloadFileInfo(const TCHAR *name, time_t lastModTime = 0);
509 virtual ~DownloadFileInfo();
510
511 virtual bool open();
512 virtual bool write(const BYTE *data, size_t dataSize, bool compressedStream);
513 virtual void close(bool success);
514 };
515
516 /**
517 * API for CommSession
518 */
519 class AbstractCommSession : public RefCountObject
520 {
521 public:
522 virtual UINT32 getId() = 0;
523
524 virtual UINT64 getServerId() = 0;
525 virtual const InetAddress& getServerAddress() = 0;
526
527 virtual bool isMasterServer() = 0;
528 virtual bool isControlServer() = 0;
529 virtual bool canAcceptData() = 0;
530 virtual bool canAcceptTraps() = 0;
531 virtual bool canAcceptFileUpdates() = 0;
532 virtual bool isBulkReconciliationSupported() = 0;
533 virtual bool isIPv6Aware() = 0;
534
535 virtual bool sendMessage(NXCPMessage *msg) = 0;
536 virtual void postMessage(NXCPMessage *msg) = 0;
537 virtual bool sendRawMessage(NXCP_MESSAGE *msg) = 0;
538 virtual void postRawMessage(NXCP_MESSAGE *msg) = 0;
539 virtual bool sendFile(UINT32 requestId, const TCHAR *file, long offset, bool allowCompression, VolatileCounter *cancelationFlag) = 0;
540 virtual UINT32 doRequest(NXCPMessage *msg, UINT32 timeout) = 0;
541 virtual NXCPMessage *doRequestEx(NXCPMessage *msg, UINT32 timeout) = 0;
542 virtual UINT32 generateRequestId() = 0;
543 virtual UINT32 openFile(TCHAR* nameOfFile, UINT32 requestId, time_t fileModTime = 0) = 0;
544 virtual void debugPrintf(int level, const TCHAR *format, ...) = 0;
545 };
546
547 /**
548 * Execute server command
549 */
550 class LIBNXAGENT_EXPORTABLE CommandExec
551 {
552 private:
553 UINT32 m_streamId;
554 THREAD m_outputThread;
555 #ifdef _WIN32
556 HANDLE m_phandle;
557 HANDLE m_pipe;
558 #else
559 pid_t m_pid;
560 int m_pipe[2];
561 #endif
562
563 protected:
564 TCHAR *m_cmd;
565 bool m_sendOutput;
566
567 #ifdef _WIN32
568 HANDLE getOutputPipe() { return m_pipe; }
569 #else
570 int getOutputPipe() { return m_pipe[0]; }
571 #endif
572
573 static THREAD_RESULT THREAD_CALL readOutput(void *pArg);
574
575 virtual void onOutput(const char *text);
576 virtual void endOfOutput();
577
578 public:
579 CommandExec(const TCHAR *cmd);
580 CommandExec();
581 virtual ~CommandExec();
582
583 UINT32 getStreamId() const { return m_streamId; }
584 const TCHAR *getCommand() const { return m_cmd; }
585
586 bool execute();
587 void stop();
588 };
589
590 /**
591 * Subagent's parameter information
592 */
593 typedef struct
594 {
595 TCHAR name[MAX_PARAM_NAME];
596 LONG (* handler)(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
597 const TCHAR *arg;
598 int dataType; // Use DT_DEPRECATED to indicate deprecated parameter
599 TCHAR description[MAX_DB_STRING];
600 } NETXMS_SUBAGENT_PARAM;
601
602 /**
603 * Subagent's push parameter information
604 */
605 typedef struct
606 {
607 TCHAR name[MAX_PARAM_NAME];
608 int dataType;
609 TCHAR description[MAX_DB_STRING];
610 } NETXMS_SUBAGENT_PUSHPARAM;
611
612 /**
613 * Subagent's list information
614 */
615 typedef struct
616 {
617 TCHAR name[MAX_PARAM_NAME];
618 LONG (* handler)(const TCHAR *, const TCHAR *, StringList *, AbstractCommSession *);
619 const TCHAR *arg;
620 TCHAR description[MAX_DB_STRING];
621 } NETXMS_SUBAGENT_LIST;
622
623 /**
624 * Subagent's table column information
625 */
626 typedef struct
627 {
628 TCHAR name[MAX_COLUMN_NAME];
629 TCHAR displayName[MAX_COLUMN_NAME];
630 int dataType;
631 bool isInstance;
632 } NETXMS_SUBAGENT_TABLE_COLUMN;
633
634 /**
635 * Subagent's table information
636 */
637 typedef struct
638 {
639 TCHAR name[MAX_PARAM_NAME];
640 LONG (* handler)(const TCHAR *, const TCHAR *, Table *, AbstractCommSession *);
641 const TCHAR *arg;
642 TCHAR instanceColumns[MAX_COLUMN_NAME * MAX_INSTANCE_COLUMNS];
643 TCHAR description[MAX_DB_STRING];
644 int numColumns;
645 NETXMS_SUBAGENT_TABLE_COLUMN *columns;
646 } NETXMS_SUBAGENT_TABLE;
647
648 /**
649 * Subagent's action information
650 */
651 typedef struct
652 {
653 TCHAR name[MAX_PARAM_NAME];
654 LONG (* handler)(const TCHAR *, StringList *, const TCHAR *, AbstractCommSession *);
655 const TCHAR *arg;
656 TCHAR description[MAX_DB_STRING];
657 } NETXMS_SUBAGENT_ACTION;
658
659 #define NETXMS_SUBAGENT_INFO_MAGIC ((UINT32)0x20161127)
660
661 class NXCPMessage;
662
663 /**
664 * Subagent initialization structure
665 */
666 typedef struct
667 {
668 UINT32 magic; // Magic number to check if subagent uses correct version of this structure
669 TCHAR name[MAX_SUBAGENT_NAME];
670 TCHAR version[32];
671 BOOL (* init)(Config *); // Called to initialize subagent. Can be NULL.
672 void (* shutdown)(); // Called at subagent unload. Can be NULL.
673 BOOL (* commandHandler)(UINT32 command, NXCPMessage *request, NXCPMessage *response, AbstractCommSession *session);
674 UINT32 numParameters;
675 NETXMS_SUBAGENT_PARAM *parameters;
676 UINT32 numLists;
677 NETXMS_SUBAGENT_LIST *lists;
678 UINT32 numTables;
679 NETXMS_SUBAGENT_TABLE *tables;
680 UINT32 numActions;
681 NETXMS_SUBAGENT_ACTION *actions;
682 UINT32 numPushParameters;
683 NETXMS_SUBAGENT_PUSHPARAM *pushParameters;
684 } NETXMS_SUBAGENT_INFO;
685
686 /**
687 * Inline functions for returning parameters
688 */
689 inline void ret_string(TCHAR *rbuf, const TCHAR *value)
690 {
691 nx_strncpy(rbuf, value, MAX_RESULT_LENGTH);
692 }
693
694 inline void ret_wstring(TCHAR *rbuf, const WCHAR *value)
695 {
696 #ifdef UNICODE
697 nx_strncpy(rbuf, value, MAX_RESULT_LENGTH);
698 #else
699 WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK | WC_DEFAULTCHAR, value, -1, rbuf, MAX_RESULT_LENGTH, NULL, NULL);
700 rbuf[MAX_RESULT_LENGTH - 1] = 0;
701 #endif
702 }
703
704 inline void ret_mbstring(TCHAR *rbuf, const char *value)
705 {
706 #ifdef UNICODE
707 MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, value, -1, rbuf, MAX_RESULT_LENGTH);
708 rbuf[MAX_RESULT_LENGTH - 1] = 0;
709 #else
710 nx_strncpy(rbuf, value, MAX_RESULT_LENGTH);
711 #endif
712 }
713
714 inline void ret_int(TCHAR *rbuf, LONG value)
715 {
716 #if defined(_WIN32) && (_MSC_VER >= 1300) && !defined(__clang__)
717 _sntprintf_s(rbuf, MAX_RESULT_LENGTH, _TRUNCATE, _T("%ld"), (long)value);
718 #else
719 _sntprintf(rbuf, MAX_RESULT_LENGTH, _T("%ld"), (long)value);
720 #endif
721 }
722
723 inline void ret_uint(TCHAR *rbuf, UINT32 value)
724 {
725 #if defined(_WIN32) && (_MSC_VER >= 1300) && !defined(__clang__)
726 _sntprintf_s(rbuf, MAX_RESULT_LENGTH, _TRUNCATE, _T("%lu"), (unsigned long)value);
727 #else
728 _sntprintf(rbuf, MAX_RESULT_LENGTH, _T("%lu"), (unsigned long)value);
729 #endif
730 }
731
732 inline void ret_double(TCHAR *rbuf, double value, int digits = 6)
733 {
734 #if defined(_WIN32) && (_MSC_VER >= 1300) && !defined(__clang__)
735 _sntprintf_s(rbuf, MAX_RESULT_LENGTH, _TRUNCATE, _T("%1.*f"), digits, value);
736 #else
737 _sntprintf(rbuf, MAX_RESULT_LENGTH, _T("%1.*f"), digits, value);
738 #endif
739 }
740
741 inline void ret_int64(TCHAR *rbuf, INT64 value)
742 {
743 #if defined(_WIN32) && (_MSC_VER >= 1300) && !defined(__clang__)
744 _sntprintf_s(rbuf, MAX_RESULT_LENGTH, _TRUNCATE, _T("%I64d"), value);
745 #else /* _WIN32 */
746 _sntprintf(rbuf, MAX_RESULT_LENGTH, INT64_FMT, value);
747 #endif /* _WIN32 */
748 }
749
750 inline void ret_uint64(TCHAR *rbuf, QWORD value)
751 {
752 #if defined(_WIN32) && (_MSC_VER >= 1300) && !defined(__clang__)
753 _sntprintf_s(rbuf, MAX_RESULT_LENGTH, _TRUNCATE, _T("%I64u"), value);
754 #else /* _WIN32 */
755 _sntprintf(rbuf, MAX_RESULT_LENGTH, UINT64_FMT, value);
756 #endif /* _WIN32 */
757 }
758
759 /**
760 * API for subagents
761 */
762 bool LIBNXAGENT_EXPORTABLE AgentGetParameterArgA(const TCHAR *param, int index, char *arg, int maxSize, bool inBrackets = true);
763 bool LIBNXAGENT_EXPORTABLE AgentGetParameterArgW(const TCHAR *param, int index, WCHAR *arg, int maxSize, bool inBrackets = true);
764 #ifdef UNICODE
765 #define AgentGetParameterArg AgentGetParameterArgW
766 #else
767 #define AgentGetParameterArg AgentGetParameterArgA
768 #endif
769
770 void LIBNXAGENT_EXPORTABLE AgentWriteLog(int logLevel, const TCHAR *format, ...)
771 #if !defined(UNICODE) && (defined(__GNUC__) || defined(__clang__))
772 __attribute__ ((format(printf, 2, 3)))
773 #endif
774 ;
775 void LIBNXAGENT_EXPORTABLE AgentWriteLog2(int logLevel, const TCHAR *format, va_list args);
776 void LIBNXAGENT_EXPORTABLE AgentWriteDebugLog(int level, const TCHAR *format, ...)
777 #if !defined(UNICODE) && (defined(__GNUC__) || defined(__clang__))
778 __attribute__ ((format(printf, 2, 3)))
779 #endif
780 ;
781 void LIBNXAGENT_EXPORTABLE AgentWriteDebugLog2(int level, const TCHAR *format, va_list args);
782
783 void LIBNXAGENT_EXPORTABLE AgentSendTrap(UINT32 dwEvent, const TCHAR *eventName, const char *pszFormat, ...);
784 void LIBNXAGENT_EXPORTABLE AgentSendTrap2(UINT32 dwEvent, const TCHAR *eventName, int nCount, TCHAR **ppszArgList);
785
786 bool LIBNXAGENT_EXPORTABLE AgentEnumerateSessions(EnumerationCallbackResult (* callback)(AbstractCommSession *, void *), void *data);
787 AbstractCommSession LIBNXAGENT_EXPORTABLE *AgentFindServerSession(UINT64 serverId);
788
789 bool LIBNXAGENT_EXPORTABLE AgentSendFileToServer(void *session, UINT32 requestId, const TCHAR *file, long offset, bool allowCompression, VolatileCounter *cancelationFlag);
790
791 bool LIBNXAGENT_EXPORTABLE AgentPushParameterData(const TCHAR *parameter, const TCHAR *value);
792 bool LIBNXAGENT_EXPORTABLE AgentPushParameterDataInt32(const TCHAR *parameter, LONG value);
793 bool LIBNXAGENT_EXPORTABLE AgentPushParameterDataUInt32(const TCHAR *parameter, UINT32 value);
794 bool LIBNXAGENT_EXPORTABLE AgentPushParameterDataInt64(const TCHAR *parameter, INT64 value);
795 bool LIBNXAGENT_EXPORTABLE AgentPushParameterDataUInt64(const TCHAR *parameter, QWORD value);
796 bool LIBNXAGENT_EXPORTABLE AgentPushParameterDataDouble(const TCHAR *parameter, double value);
797
798 CONDITION LIBNXAGENT_EXPORTABLE AgentGetShutdownCondition();
799 bool LIBNXAGENT_EXPORTABLE AgentSleepAndCheckForShutdown(UINT32 sleepTime);
800 const TCHAR LIBNXAGENT_EXPORTABLE *AgentGetDataDirectory();
801
802 DB_HANDLE LIBNXAGENT_EXPORTABLE AgentGetLocalDatabaseHandle();
803
804 TCHAR LIBNXAGENT_EXPORTABLE *ReadRegistryAsString(const TCHAR *attr, TCHAR *buffer = NULL, int bufSize = 0, const TCHAR *defaultValue = NULL);
805 INT32 LIBNXAGENT_EXPORTABLE ReadRegistryAsInt32(const TCHAR *attr, INT32 defaultValue);
806 INT64 LIBNXAGENT_EXPORTABLE ReadRegistryAsInt64(const TCHAR *attr, INT64 defaultValue);
807 bool LIBNXAGENT_EXPORTABLE WriteRegistry(const TCHAR *attr, const TCHAR *value);
808 bool LIBNXAGENT_EXPORTABLE WriteRegistry(const TCHAR *attr, INT32 value);
809 bool LIBNXAGENT_EXPORTABLE WriteRegistry(const TCHAR *attr, INT64 value);
810 bool LIBNXAGENT_EXPORTABLE DeleteRegistryEntry(const TCHAR *attr);
811
812 /**
813 * LoraWAN device payload
814 */
815 typedef BYTE lorawan_payload_t[36];
816
817 /**
818 * Lora device data
819 */
820 class LIBNXAGENT_EXPORTABLE LoraDeviceData
821 {
822 private:
823 uuid m_guid;
824 MacAddress m_devAddr;
825 MacAddress m_devEui;
826 lorawan_payload_t m_payload;
827 INT32 m_decoder;
828 char m_dataRate[24];
829 INT32 m_rssi;
830 double m_snr;
831 double m_freq;
832 UINT32 m_fcnt;
833 UINT32 m_port;
834 time_t m_lastContact;
835
836 public:
837 LoraDeviceData(NXCPMessage *request);
838 LoraDeviceData(DB_RESULT result, int row);
839
840 UINT32 saveToDB (bool isNew = false) const;
841 UINT32 deleteFromDB () const;
842
843 bool isOtaa() const { return (m_devEui.length() > 0) ? true : false; }
844
845 const uuid& getGuid() const { return m_guid; }
846
847 const MacAddress& getDevAddr() const { return m_devAddr; }
848 void setDevAddr(MacAddress devAddr) { m_devAddr = devAddr; saveToDB(); }
849 const MacAddress& getDevEui() const { return m_devEui; }
850
851 const BYTE *getPayload() const { return m_payload; }
852 void setPayload(const char *payload) { StrToBinA(payload, m_payload, 36); }
853
854 UINT32 getDecoder() { return m_decoder; }
855
856 const char *getDataRate() const { return m_dataRate; }
857 void setDataRate(const char *dataRate) { strncpy(m_dataRate, dataRate, 24); }
858
859 INT32 getRssi() const { return m_rssi; }
860 void setRssi(INT32 rssi) { m_rssi = rssi; }
861
862 double getSnr() const { return m_snr; }
863 void setSnr(double snr) { m_snr = snr; }
864
865 double getFreq() const { return m_freq; }
866 void setFreq(double freq) { m_freq = freq; }
867
868 UINT32 getFcnt() const { return m_fcnt; }
869 void setFcnt(UINT32 fcnt) { m_fcnt = fcnt; }
870
871 UINT32 getPort() const { return m_port; }
872 void setPort(UINT32 port) { m_port = port; }
873
874 INT32 getLastContact() const { return (INT32)m_lastContact; }
875 void updateLastContact() { m_lastContact = time(NULL); }
876 };
877
878 #endif /* _nms_agent_h_ */