1PMDAEVENTQUEUE(3) Library Functions Manual PMDAEVENTQUEUE(3)
2
3
4
6 pmdaEventNewQueue, pmdaEventNewActiveQueue, pmdaEventQueueHandle,
7 pmdaEventQueueAppend, pmdaEventQueueShutdown, pmdaEventQueueRecords,
8 pmdaEventQueueClients, pmdaEventQueueCounter, pmdaEventQueueBytes,
9 pmdaEventQueueMemory - utilities for PMDAs managing event queues
10
12 #include <pcp/pmapi.h>
13 #include <pcp/pmda.h>
14
15 int pmdaEventNewQueue(const char *name, size_t maxmem);
16 int pmdaEventNewActiveQueue(const char *name, size_t maxmem, int
17 nclients);
18 int pmdaEventQueueHandle(const char *name);
19 int pmdaEventQueueAppend(int handle, void *buffer, size_t bytes, struct
20 timeval *tv);
21 int pmdaEventQueueShutdown(int handle);
22
23 typedef int (*pmdaEventDecodeCallBack)(int, void *, int, struct timeval
24 *, void *);
25 int pmdaEventQueueRecords(int handle, pmAtomValue *avp, int context,
26 pmdaEventDecodeCallBack decoder, void *data);
27 int pmdaEventQueueClients(int handle, pmAtomValue *avp);
28 int pmdaEventQueueCounter(int handle, pmAtomValue *avp);
29 int pmdaEventQueueBytes(int handle, pmAtomValue *avp);
30 int pmdaEventQueueMemory(int handle, pmAtomValue *avp);
31
32 cc ... -lpcp_pmda -lpcp
33
35 A Performance Metrics Domain Agent (PMDA) that exports event records
36 must effectively act an event multiplexer. Events consumed by the PMDA
37 may have to be forwarded on to any number of monitoring tools (or
38 "client contexts"). These tools may be requesting events at different
39 sampling intervals, and are very unlikely to request an event at the
40 exact moment it arrives at the PMDA, making some form of event buffer‐
41 ing and queueing scheme a necessity. Events must be held by the PMDA
42 until either all registered clients have been sent them, or until a
43 memory limit has been reached by the PMDA at which point it must dis‐
44 card older events as new ones arrive.
45
46 The routines described here are designed to assist the PMDA developer
47 in managing both client contexts and queues of events at a high level.
48 These fit logically above lower level primitives, such as those de‐
49 scribed in pmdaEventNewArray(3), and shield the average PMDA from the
50 details of directly building event record arrays for individual client
51 contexts.
52
53 The PMDA registers a new queue of events using either pmdaEventNewQueue
54 or pmdaEventNewActiveQueue. These are passed an identifying name (for
55 diagnostic purposes, and for subsequent lookup by pmdaEventQueueLookup)
56 and maxmem, an upper bound on the memory (in bytes) that can be con‐
57 sumed by events in this queue, before beginning to discard them (re‐
58 sulting in "missed" events for any client that has not kept up). If a
59 queue is dynamically allocated (such that the PMDA may already have
60 clients connected) the pmdaEventNewActiveQueue interface should be
61 used, with the additional numclients parameter indicating the count of
62 active client connections. The return is a negative error code on
63 failure, suitable for decoding by the pmErrStr(3) routine. Any non-
64 negative value indicates success, and provides a handle suitable for
65 passing into the other API routines.
66
67 For each new event received by the PMDA, the pmdaEventQueueAppend rou‐
68 tine should be called, placing that event into the queue identified by
69 handle. The event itself must be contained in the passed in buffer,
70 having bytes length. The timestamp associated with the event (time at
71 which the event occurred) is passed in via the final tv parameter.
72
73 In the PMDAs specific implementation of its fetch callback, when values
74 for an event metric have been requested, the pmdaEventQueueRecords rou‐
75 tine should be used. It is passed the queue handle and the avp pmAtom‐
76 Value structure to fill with event records, for the client making that
77 fetch request (identified by the context parameter). Finally, the PMDA
78 must also pass in an event decoding routine, which is responsible for
79 decoding the fields of a single event into the individual event parame‐
80 ters of that event. The data parameter is an opaque cookie that can be
81 used to pass situation-specific information into each decoder invoca‐
82 tion.
83
84 Under some situations it is useful for the PMDA to export state about
85 the queues under its control. The accessor routines - pmdaEventQueue‐
86 Clients, pmdaEventQueueCounter, pmdaEventQueueBytes and pmdaEventQueue‐
87 Memory provide a mechanism for querying a queue by its handle and fill‐
88 ing in a pmAtomValue structure that the pmdaFetchCallBack method should
89 return.
90
92 PMAPI(3), PMDA(3), pmdaEventNewClient(3) and pmdaEventNewArray(3).
93
94
95
96Performance Co-Pilot PCP PMDAEVENTQUEUE(3)