summaryrefslogtreecommitdiff
path: root/man/man3/pmdaeventqueue.3
diff options
context:
space:
mode:
Diffstat (limited to 'man/man3/pmdaeventqueue.3')
-rw-r--r--man/man3/pmdaeventqueue.3190
1 files changed, 190 insertions, 0 deletions
diff --git a/man/man3/pmdaeventqueue.3 b/man/man3/pmdaeventqueue.3
new file mode 100644
index 0000000..43f243b
--- /dev/null
+++ b/man/man3/pmdaeventqueue.3
@@ -0,0 +1,190 @@
+'\"macro stdmacro
+.\"
+.\" Copyright (c) 2011-2012 Nathan Scott. All Rights Reserved.
+.\"
+.\" This program is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License as published by the
+.\" Free Software Foundation; either version 2 of the License, or (at your
+.\" option) any later version.
+.\"
+.\" This program is distributed in the hope that it will be useful, but
+.\" WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+.\" or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+.\" for more details.
+.\"
+.\"
+.TH PMDAEVENTQUEUE 3 "PCP" "Performance Co-Pilot"
+.SH NAME
+.ad l
+\f3pmdaEventNewQueue\f1,
+\f3pmdaEventNewActiveQueue\f1,
+\f3pmdaEventQueueHandle\f1,
+\f3pmdaEventQueueAppend\f1,
+\f3pmdaEventQueueRecords\f1,
+\f3pmdaEventQueueClients\f1,
+\f3pmdaEventQueueCounter\f1,
+\f3pmdaEventQueueBytes\f1,
+\f3pmdaEventQueueMemory\f1 \- utilities for PMDAs managing event queues
+.br
+.ad
+.SH "C SYNOPSIS"
+.ft 3
+.nf
+#include <pcp/pmapi.h>
+#include <pcp/impl.h>
+#include <pcp/pmda.h>
+.fi
+.sp
+.ad l
+.hy 0
+.in +8n
+.ti -8n
+int pmdaEventNewQueue(const char *\fIname\fP, size_t \fImaxmem\fP);
+.br
+.ti -8n
+int pmdaEventNewActiveQueue(const char *\fIname\fP, size_t \fImaxmem\fP, int \fInclients\fP);
+.br
+.ti -8n
+int pmdaEventQueueHandle(const char *\fIname\fP);
+.br
+.ti -8n
+int pmdaEventQueueAppend(int \fIhandle\fP, void *\fIbuffer\fP, size_t \fIbytes\fP, struct timeval *\fItv\fP);
+.br
+.sp
+.in
+.hy
+.ad
+.in +8n
+.ti -8n
+typedef int (*pmdaEventDecodeCallBack)(int, void *, int, struct timeval *, void *);
+.br
+.ti -8n
+int pmdaEventQueueRecords(int \fIhandle\fP, pmAtomValue *\fIavp\fP, int \fIcontext\fP, pmdaEventDecodeCallBack \fIdecoder\fP, void *\fIdata\fP);
+.br
+.ti -8n
+int pmdaEventQueueClients(int \fIhandle\fP, pmAtomValue *\fIavp\fP);
+.br
+.ti -8n
+int pmdaEventQueueCounter(int \fIhandle\fP, pmAtomValue *\fIavp\fP);
+.br
+.ti -8n
+int pmdaEventQueueBytes(int \fIhandle\fP, pmAtomValue *\fIavp\fP);
+.br
+.ti -8n
+int pmdaEventQueueMemory(int \fIhandle\fP, pmAtomValue *\fIavp\fP);
+.sp
+.in
+.hy
+.ad
+cc ... \-lpcp_pmda \-lpcp
+.ft 1
+.SH DESCRIPTION
+.de CW
+.ie t \f(CW\\$1\f1\\$2
+.el \fI\\$1\f1\\$2
+..
+A Performance Metrics Domain Agent (PMDA) that exports event records
+must effectively act an event multiplexer.
+Events consumed by the PMDA may have to be forwarded on to any number
+of monitoring tools (or "client contexts").
+These tools may be requesting events at different sampling intervals,
+and are very unlikely to request an event at the exact moment it arrives
+at the PMDA, making some form of event buffering and queueing scheme a
+necessity.
+Events must be held by the PMDA until either all registered clients
+have been sent them, or until a memory limit has been reached by the
+PMDA at which point it must discard older events as new ones arrive.
+.PP
+The routines described here are designed to assist the PMDA developer
+in managing both client contexts and queues of events at a high level.
+These fit logically above lower level primitives, such as those
+described in
+.BR pmdaEventNewArray (3),
+and shield the average PMDA from the details of directly building event
+record arrays for individual client contexts.
+.PP
+The PMDA registers a new queue of events using either
+.B pmdaEventNewQueue
+or
+.BR pmdaEventNewActiveQueue .
+These are passed an identifying
+.I name
+(for diagnostic purposes, and for subsequent lookup by
+.BR pmdaEventQueueLookup )
+and
+.IR maxmem ,
+an upper bound on the memory (in bytes) that can be consumed by events
+in this queue, before beginning to discard them (resulting in "missed"
+events for any client that has not kept up).
+If a queue is dynamically allocated (such that the PMDA may already have
+clients connected) the
+.B pmdaEventNewActiveQueue
+interface should be used, with the additional
+.I numclients
+parameter indicating the count of active client connections.
+The return is a negative error code on failure, suitable for decoding
+by the
+.BR pmErrStr (3)
+routine.
+Any non-negative value indicates success, and provides a
+.I handle
+suitable for passing into the other API routines.
+.PP
+For each new event received by the PMDA, the
+.B pmdaEventQueueAppend
+routine should be called, placing that event into the queue identified
+by
+.IR handle .
+The event itself must be contained in the passed in
+.IR buffer ,
+having
+.I bytes
+length.
+The timestamp associated with the event (time at which the event
+occurred) is passed in via the final
+.I tv
+parameter.
+.PP
+In the PMDAs specific implementation of its fetch callback, when values
+for an event metric have been requested, the
+.BR pmdaEventQueueRecords
+routine should be used.
+It is passed the queue
+.I handle
+and the
+.I avp
+pmAtomValue structure to fill with event records, for the client making
+that fetch request (identified by the
+.I context
+parameter).
+Finally, the PMDA must also pass in an event decoding routine, which is
+responsible for decoding the fields of a single event into the individual
+event parameters of that event.
+The
+.I data
+parameter is an opaque cookie that can be used to pass situation-specific
+information into each
+.I decoder
+invocation.
+.PP
+Under some situations it is useful for the PMDA to export state about
+the queues under its control.
+The accessor routines \-
+.BR pmdaEventQueueClients ,
+.BR pmdaEventQueueCounter ,
+.BR pmdaEventQueueBytes
+and
+.BR pmdaEventQueueMemory
+provide a mechanism for querying a queue by its
+.I handle
+and filling in a
+.B pmAtomValue
+structure that the
+.B pmdaFetchCallBack
+method should return.
+.SH SEE ALSO
+.BR PMAPI (3),
+.BR PMDA (3),
+.BR pmdaEventNewClient (3)
+and
+.BR pmdaEventNewArray (3).