Server IP : 184.154.167.98 / Your IP : 3.145.36.252 Web Server : Apache System : Linux pink.dnsnetservice.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 User : puertode ( 1767) PHP Version : 8.2.26 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/include/pcp/ |
Upload File : |
/* * Copyright (c) 2013-2018 Red Hat. * Copyright (c) 1995,2005 Silicon Graphics, Inc. All Rights Reserved. * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public * License for more details. */ #ifndef PCP_PMDA_H #define PCP_PMDA_H #include <stdarg.h> #ifdef __cplusplus extern "C" { #endif /* * libpcp_pmda interface versions */ #define PMDA_INTERFACE_2 2 /* new function arguments */ #define PMDA_INTERFACE_3 3 /* 3-state return from fetch callback */ #define PMDA_INTERFACE_4 4 /* dynamic pmns */ #define PMDA_INTERFACE_5 5 /* client context in pmda and */ /* 4-state return from fetch callback */ #define PMDA_INTERFACE_6 6 /* client security attributes */ #define PMDA_INTERFACE_7 7 /* metric label metadata */ #define PMDA_INTERFACE_LATEST 7 /* * Type of I/O connection to PMCD (pmdaUnknown defaults to pmdaPipe) */ typedef enum {pmdaPipe, pmdaInet, pmdaUnix, pmdaUnknown, pmdaIPv6} pmdaIoType; /* * Forward declarations of structures so that inclusion of (internal) libpcp.h * header file is not required if this header file is included. */ typedef struct __pmnsTree pmdaNameSpace; typedef struct __pmHashCtl pmdaHashTable; /* * Instance description: index and name */ typedef struct pmdaInstid { int i_inst; /* internal instance identifier */ char *i_name; /* external instance identifier */ } pmdaInstid; /* * Instance domain description: unique instance id, number of instances in * this domain, and the list of instances (not null terminated). */ typedef struct pmdaIndom { pmInDom it_indom; /* indom, filled in */ int it_numinst; /* number of instances */ pmdaInstid *it_set; /* instance identifiers */ } pmdaIndom; /* * Metric description: handle for extending description, and the description. */ typedef struct pmdaMetric { void *m_user; /* for users external use */ pmDesc m_desc; /* metric description */ } pmdaMetric; /* * Type of function call back used by pmdaFetch. */ typedef int (*pmdaFetchCallBack)(pmdaMetric *, unsigned int, pmAtomValue *); /* * return values for a pmdaFetchCallBack method */ #define PMDA_FETCH_NOVALUES 0 #define PMDA_FETCH_STATIC 1 #define PMDA_FETCH_DYNAMIC 2 /* free avp->vp after __pmStuffValue */ /* * Type of function call back used by pmdaMain to clean up a pmResult structure * after a fetch. */ typedef void (*pmdaResultCallBack)(pmResult *); /* * Type of function call back used by pmdaMain on receipt of each PDU to check * availability, etc. */ typedef int (*pmdaCheckCallBack)(void); /* * Type of function call back used by pmdaMain after each PDU has been * processed. */ typedef void (*pmdaDoneCallBack)(void); /* * Type of function call back used by pmdaMain when a client context is * closed by PMCD. */ typedef void (*pmdaEndContextCallBack)(int); /* * Type of function call back used by pmdaLabel for instance labels. */ typedef int (*pmdaLabelCallBack)(pmInDom, unsigned int, pmLabelSet **); /* * libpcp_pmda extension structure. * * The fields of this structure are initialised using pmdaDaemon() or pmdaDSO() * (if the agent is a daemon or a DSO respectively), pmdaGetOpt() and * pmdaInit(). */ typedef struct pmdaExt { unsigned int e_flags; /* PMDA_EXT_FLAG_* bit field */ void *e_ext; /* used internally within libpcp_pmda */ char *e_sockname; /* socket name to pmcd */ const char *e_name; /* name of this pmda */ const char *e_logfile; /* path to log file */ const char *e_helptext; /* path to help text */ int e_status; /* =0 is OK */ int e_infd; /* input file descriptor from pmcd */ int e_outfd; /* output file descriptor to pmcd */ int e_port; /* port to pmcd */ int e_singular; /* =0 for singular values */ int e_ordinal; /* >=0 for non-singular values */ int e_direct; /* =1 if pmid map to meta table */ int e_domain; /* metrics domain */ int e_nmetrics; /* number of metrics */ int e_nindoms; /* number of instance domains */ int e_help; /* help text comes via this handle */ pmProfile *e_prof; /* last received profile */ pmdaIoType e_io; /* connection type to pmcd */ pmdaIndom *e_indoms; /* instance domain table */ pmdaIndom *e_idp; /* used in instance domain expansion */ pmdaMetric *e_metrics; /* metric description table */ pmdaResultCallBack e_resultCallBack; /* callback to clean up pmResult after fetch */ pmdaFetchCallBack e_fetchCallBack; /* callback to assign metric values in fetch */ pmdaCheckCallBack e_checkCallBack; /* callback on receipt of a PDU */ pmdaDoneCallBack e_doneCallBack; /* callback after PDU has been processed */ /* added for PMDA_INTERFACE_5 */ int e_context; /* client context id from pmcd */ pmdaEndContextCallBack e_endCallBack; /* callback after client context closed */ /* added for PMDA_INTERFACE_7 */ pmdaLabelCallBack e_labelCallBack; /* callback to lookup metric instance labels */ } pmdaExt; #define PMDA_EXT_FLAG_DIRECT (1<<0) /* direct mapped PMID metric table */ #define PMDA_EXT_FLAG_HASHED (1<<1) /* hashed PMID metric table lookup */ #define PMDA_EXT_SETUPDONE (1<<2) /* __pmdaSetup() has been called */ #define PMDA_EXT_CONNECTED (1<<3) /* pmdaConnect() done */ #define PMDA_EXT_NOTREADY (1<<4) /* pmcd connection marked NOTREADY */ #define PMDA_EXT_LABEL_CHANGE (1<<5) /* new label metadata notification */ #define PMDA_EXT_NAMES_CHANGE (1<<6) /* metric name change notification */ /* * Optionally restrict symbol visibility for DSO PMDAs * * When compiled with -fvisibility=hidden this directive can be used * to set up the init routine so that it is the only symbol exported * by the DSO PMDA. This gives the compiler opportunity to generate * more optimal code as well as ensuring that just the one symbol is * exported (which is a good idea in itself). */ #if !defined(IS_MINGW) # if defined(__GNUC__) # define __PMDA_INIT_CALL __attribute__ ((visibility ("default"))) # else # define __PMDA_INIT_CALL # endif # define PMDA_CALL #else # define __PMDA_INIT_CALL # if defined(PMDA_INTERNAL) # define PMDA_CALL __declspec(dllexport) # else # define PMDA_CALL __declspec(dllimport) # endif #endif /* * Interface Definitions for PMDA DSO Interface * The new interface structure makes use of a union to manage new revisions * cleanly. The structure for each new version must be backward compatible * to all of the previous versions (i.e. contain earlier fields unchanged). * * The domain field is set by pmcd(1) in the case of a DSO PMDA, and by * pmdaDaemon and pmdaGetOpt in the case of a Daemon PMDA. It should not be * modified. */ typedef struct pmdaInterface { int domain; /* performance metrics domain id */ struct { unsigned int pmda_interface : 8; /* PMDA DSO interface version */ unsigned int pmapi_version : 8; /* PMAPI version */ unsigned int flags : 16; /* optional feature flags */ } comm; /* set/return communication and version info */ int status; /* return initialization status here */ union { /* * Interface Version 2 and 3 (PCP 2.0) * PMDA_INTERFACE_2 and PMDA_INTERFACE_3 */ struct { pmdaExt *ext; int (*profile)(pmProfile *, pmdaExt *); int (*fetch)(int, pmID *, pmResult **, pmdaExt *); int (*desc)(pmID, pmDesc *, pmdaExt *); int (*instance)(pmInDom, int, char *, pmInResult **, pmdaExt *); int (*text)(int, int, char **, pmdaExt *); int (*store)(pmResult *, pmdaExt *); } any, two, three; /* * Interface Version 4 (dynamic pmns support) and Version 5 (client context * in PMDA). * PMDA_INTERFACE_4, PMDA_INTERFACE_5 */ struct { pmdaExt *ext; int (*profile)(pmProfile *, pmdaExt *); int (*fetch)(int, pmID *, pmResult **, pmdaExt *); int (*desc)(pmID, pmDesc *, pmdaExt *); int (*instance)(pmInDom, int, char *, pmInResult **, pmdaExt *); int (*text)(int, int, char **, pmdaExt *); int (*store)(pmResult *, pmdaExt *); int (*pmid)(const char *, pmID *, pmdaExt *); int (*name)(pmID, char ***, pmdaExt *); int (*children)(const char *, int, char ***, int **, pmdaExt *); } four, five; /* * Interface Version 6 (client context security attributes in PMDA). * PMDA_INTERFACE_6 */ struct { pmdaExt *ext; int (*profile)(pmProfile *, pmdaExt *); int (*fetch)(int, pmID *, pmResult **, pmdaExt *); int (*desc)(pmID, pmDesc *, pmdaExt *); int (*instance)(pmInDom, int, char *, pmInResult **, pmdaExt *); int (*text)(int, int, char **, pmdaExt *); int (*store)(pmResult *, pmdaExt *); int (*pmid)(const char *, pmID *, pmdaExt *); int (*name)(pmID, char ***, pmdaExt *); int (*children)(const char *, int, char ***, int **, pmdaExt *); int (*attribute)(int, int, const char *, int, pmdaExt *); } six; /* * Interface Version 7 (metric instance name:value labeling in PMDA). * PMDA_INTERFACE_7 */ struct { pmdaExt *ext; int (*profile)(pmProfile *, pmdaExt *); int (*fetch)(int, pmID *, pmResult **, pmdaExt *); int (*desc)(pmID, pmDesc *, pmdaExt *); int (*instance)(pmInDom, int, char *, pmInResult **, pmdaExt *); int (*text)(int, int, char **, pmdaExt *); int (*store)(pmResult *, pmdaExt *); int (*pmid)(const char *, pmID *, pmdaExt *); int (*name)(pmID, char ***, pmdaExt *); int (*children)(const char *, int, char ***, int **, pmdaExt *); int (*attribute)(int, int, const char *, int, pmdaExt *); int (*label)(int, int, pmLabelSet **, pmdaExt *); } seven; } version; } pmdaInterface; /* comm(unication) flags */ #define PMDA_FLAG_AUTHORIZE (1<<2) /* authentication support */ #define PMDA_FLAG_CONTAINER (1<<6) /* container name support */ /* communication attributes (mirrored from libpcp.h) */ #define PMDA_ATTR_USERNAME 5 /* username (sasl) */ #define PMDA_ATTR_USERID 11 /* uid - user identifier (posix) */ #define PMDA_ATTR_GROUPID 12 /* gid - group identifier (posix) */ #define PMDA_ATTR_PROCESSID 14 /* pid - process identifier (posix) */ #define PMDA_ATTR_CONTAINER 15 /* container name */ /* * PM_CONTEXT_LOCAL support */ typedef struct __pmDSO { int domain; char *name; char *init; void *handle; int ctx_last_prof; /* ctx that sent last profile */ pmdaInterface dispatch; } __pmDSO; /* * Macro that can be used to create each metrics' PMID. * cluster has a maximum value of 2^12-1 * item has a maximum value of 2^10-1 */ #define PMDA_PMID(cluster,item) ((((cluster)&0xfff)<<10)|((item)&0x3ff)) /* Macro for pmUnits bitmap in a pmDesc declaration */ #ifdef HAVE_BITFIELDS_LTOR #define PMDA_PMUNITS(a,b,c,d,e,f) {a,b,c,d,e,f,0} #else #define PMDA_PMUNITS(a,b,c,d,e,f) {0,f,e,d,c,b,a} #endif /* Command line option processing macros and data structures */ #define PMDA_OPTIONS "D:d:h:i:l:pu:U:" #define PMDA_OPTIONS_HEADER(s) { "", 0, '-', 0, (s) } #define PMDA_OPTIONS_TEXT(s) { "", 0, '|', 0, (s) } #define PMDA_OPTIONS_END { NULL, 0, 0, 0, NULL } #define PMDAOPT_DEBUG { "debug", 1, 'D', "DBG", \ NULL } #define PMDAOPT_DOMAIN { "domain", 1, 'd', "NUM", \ "use domain (numeric) for metrics domain of PMDA" } #define PMDAOPT_HELPTEXT { "helpfile", 1, 'h', "FILE", \ "path to PMDA metrics help text file" } #define PMDAOPT_INET { "inet", 1, 'i', "PORT", \ "pmcd IPv4 connection service name or numeric port" } #define PMDAOPT_IPV6 { "ipv6", 1, '6', "PORT", \ "pmcd IPv6 connection service name or numeric port" } #define PMDAOPT_LOGFILE { "log", 1, 'l', "FILE", \ "write log to FILE rather than using default log name" } #define PMDAOPT_PIPE { "pipe", 0, 'p', 0, \ "use a pipe for communication with pmcd" } #define PMDAOPT_UNIX { "unix", 1, 'u', "FILE", \ "use a unix domain socket for communication with pmcd" } #define PMDAOPT_USERNAME { "username", 1, 'U', "USER", \ "run the PMDA using the named user account" } struct pmdaOptions; #define __pmdaOptions pmdaOptions /* backward-compatibility */ typedef int (*pmdaOptionOverride)(int, struct pmdaOptions *); typedef struct pmdaOptions { int version; int flags; const char * short_options; pmLongOptions * long_options; const char * short_usage; pmdaOptionOverride override; /* out: usual getopt information */ int index; int optind; int opterr; int optopt; char *optarg; /* internals; do not ever access */ int __initialized; char * __nextchar; int __ordering; int __posixly_correct; int __first_nonopt; int __last_nonopt; /* out: error count */ int errors; /* out: PMDA options (non-pmdaInterface options) */ char * username; } pmdaOptions; /* * PMDA Setup Routines. * * pmdaGetOpt * pmdaGetOptions * pmdaUsageMessage * Replacements for pmgetopt_r(3) which strip out the standard PMDA flags * before returning the next command line option. The standard PMDA * flags are PMDA_OPTIONS which will initialise the pmdaExt structure * with the IPC details, path to the log and help file, domain number, * and the user account under which the PMDA should run. * An error counter will be incremented if there was an error parsing any * of these options. * * pmdaDaemon * Setup the pmdaInterface structure for a daemon and initialise * the pmdaExt structure with the PMDA's name, domain and path to * the log file and help file. The libpcp internal state is also * initialised. * * pmdaDSO * Setup the pmdaInterface structure for a DSO and initialise the * pmdaExt structure with the PMDA's name and help file. * * pmdaOpenLog * Redirects stderr to the logfile. * * pmdaSetFlags / pmdaExtSetFlags / pmdaSetCommFlags * Allow behaviour flags to be set to enable features, such as to request * libpcp_pmda internally use direct or hashed PMID metric table mapping. * Can be called multiple times - effects are cumulative - no flag can be * cleared, although libpcp_pmda may disable a flag later on if it cannot * enact the requested behaviour. Must be called before pmdaInit for any * flags involving early setup (such as metric table hashing), otherwise * can be called at any time (such as for namespace change notification). * * pmdaSetData / pmdaExtSetData / pmdaExtGetData * Private data hook get/set for (esp. DSO) PMDAs that is accessible via * the callbacks through the pmdaExt structure. * * pmdaInit * Further initialises the pmdaExt structure with the instance domain and * metric structures. Unique identifiers are applied to each instance * domain and metric. Also open the help text file and checks whether the * metrics can be directly mapped. * * pmdaConnect * Connect to the PMCD process using the method set in the pmdaExt e_io * field. * * pmdaMain * Loop which receives PDUs and dispatches the callbacks. Must be called * by a daemon PMDA. * * pmdaSendError * Used to inform PMCD the PMDA is ready/notready to process requests. * See pmcd(1) for details, in particular the protocol entry for the * PMDA in pmcd.conf can specify "notready", in which case the PMDA * must call pmdaSendError(dispatch, PM_ERR_PMDAREADY) when it is * ready after starting up. * * pmdaSetResultCallBack * Allows an application specific routine to be specified for cleaning up * a pmResult after a fetch. Most PMDAs should not use this. * * pmdaSetFetchCallBack * Allows an application specific routine to be specified for completing a * pmAtom structure with a metrics value. This must be set if pmdaFetch is * used as the fetch callback. * * pmdaSetCheckCallBack * Allows an application specific routine to be called upon receipt of any * PDU. For all PDUs except PDU_PROFILE, a result less than zero * indicates an error. If set to zero (which is also the default), * the callback is ignored. * * pmdaSetDoneCallBack * Allows an application specific routine to be called after each PDU is * processed. The result is ignored. If set to zero (which is also * the default), the callback is ignored. * * pmdaSetEndContextCallBack * Allows an application specific routine to be called when a * PMCD context is closed, so any per-context state can be cleaned * up. If set to zero (which is also the default), the callback * is ignored. * * pmdaSetLabelCallBack * Lookup any metadata labels associated with metric instances. * Passed in a metric table entry and instance identifier and expects * the callback to fill the given labelset structure. */ PMDA_CALL extern int pmdaGetOpt(int, char *const *, const char *, pmdaInterface *, int *); PMDA_CALL extern int pmdaGetOptions(int, char *const *, pmdaOptions *, pmdaInterface *); PMDA_CALL extern void pmdaUsageMessage(pmdaOptions *); PMDA_CALL extern void pmdaDaemon(pmdaInterface *, int, const char *, int , const char *, const char *); PMDA_CALL extern void pmdaDSO(pmdaInterface *, int, char *, char *); PMDA_CALL extern void pmdaOpenLog(pmdaInterface *); PMDA_CALL extern void *pmdaExtGetData(pmdaExt *); PMDA_CALL extern void pmdaExtSetData(pmdaExt *, void *); PMDA_CALL extern void pmdaSetData(pmdaInterface *, void *); PMDA_CALL extern void pmdaExtSetFlags(pmdaExt *, int); PMDA_CALL extern void pmdaSetFlags(pmdaInterface *, int); PMDA_CALL extern void pmdaSetCommFlags(pmdaInterface *, int); PMDA_CALL extern void pmdaInit(pmdaInterface *, pmdaIndom *, int, pmdaMetric *, int); PMDA_CALL extern void pmdaConnect(pmdaInterface *); PMDA_CALL extern void pmdaMain(pmdaInterface *); PMDA_CALL extern void pmdaSendError(pmdaInterface *, int); PMDA_CALL extern void pmdaSetResultCallBack(pmdaInterface *, pmdaResultCallBack); PMDA_CALL extern void pmdaSetFetchCallBack(pmdaInterface *, pmdaFetchCallBack); PMDA_CALL extern void pmdaSetCheckCallBack(pmdaInterface *, pmdaCheckCallBack); PMDA_CALL extern void pmdaSetDoneCallBack(pmdaInterface *, pmdaDoneCallBack); PMDA_CALL extern void pmdaSetEndContextCallBack(pmdaInterface *, pmdaEndContextCallBack); PMDA_CALL extern void pmdaSetLabelCallBack(pmdaInterface *, pmdaLabelCallBack); /* * Callbacks to PMCD which should be adequate for most PMDAs. * NOTE: if pmdaFetch is used, e_callback must be specified in the pmdaExt * structure. * * pmdaProfile * Store the instance profile away for the next fetch. * * pmdaFetch * Resize the pmResult and call e_callback in the pmdaExt structure * for each metric instance required by the profile. * * pmdaInstance * Return description of instances and instance domains. * * pmdaDesc * Return the metric description. * * pmdaText * Return the help text for the metric or instance domain. * * pmdaStore * Store a value into a metric. This sets the context number. * * pmdaPMID * Return the PMID for a named metric within a dynamic subtree * of the PMNS. * * pmdaName * Given a PMID, return the names of all matching metrics within a * dynamic subtree of the PMNS. * * pmdaChildren * If traverse == 0, return the names of all the descendent children * and their status, given a named metric in a dynamic subtree of * the PMNS (this is the pmGetChildren or pmGetChildrenStatus variant). * If traverse == 1, return the full names of all descendent metrics * (this is the pmTraversePMNS variant, with the status added) * * pmdaAttribute * Inform the agent about security aspects of a client connection, * such as the authenticated userid. Passed in a client identifier, * numeric PCP_ATTR, pointer to the associated value, and the length * of the value. * * pmdaLabel * Return labels for contexts, domains, metrics, indoms or instances. * Passed in a type (PM_LABEL) and identifier (domain, metric, indom); * fills in labelsets, returns a count thereof or negative error code. */ PMDA_CALL extern int pmdaProfile(pmProfile *, pmdaExt *); PMDA_CALL extern int pmdaFetch(int, pmID *, pmResult **, pmdaExt *); PMDA_CALL extern int pmdaInstance(pmInDom, int, char *, pmInResult **, pmdaExt *); PMDA_CALL extern int pmdaDesc(pmID, pmDesc *, pmdaExt *); PMDA_CALL extern int pmdaText(int, int, char **, pmdaExt *); PMDA_CALL extern int pmdaStore(pmResult *, pmdaExt *); PMDA_CALL extern int pmdaPMID(const char *, pmID *, pmdaExt *); PMDA_CALL extern int pmdaName(pmID, char ***, pmdaExt *); PMDA_CALL extern int pmdaChildren(const char *, int, char ***, int **, pmdaExt *); PMDA_CALL extern int pmdaAttribute(int, int, const char *, int, pmdaExt *); PMDA_CALL extern int pmdaLabel(int, int, pmLabelSet **, pmdaExt *); /* * PMDA "help" text manipulation */ PMDA_CALL extern int pmdaOpenHelp(const char *); PMDA_CALL extern void pmdaCloseHelp(int); PMDA_CALL extern char *pmdaGetHelp(int, pmID, int); PMDA_CALL extern char *pmdaGetInDomHelp(int, pmInDom, int); /* * PMDA "label" metadata (name:value pairs) manipulation */ PMDA_CALL extern int pmdaAddLabels(pmLabelSet **, const char *, ...) __PM_PRINTFLIKE(2,3); PMDA_CALL extern int pmdaAddNotes(pmLabelSet **, const char *, ...) __PM_PRINTFLIKE(2,3); PMDA_CALL extern int pmdaAddLabelFlags(pmLabelSet *, int); /* * Dynamic metric table manipulation * * pmdaExtDynamicPMNS / pmdaDynamicPMNS * Register a new dynamic namespace sub-tree associated with one or more * PMID clusters. Callbacks are passed in to deal with PMDA-specific * components (names, help text, metric duplication, and table sizing). * pmdaExtDynamicPMNS is preferred as it works in both DSO/daemon modes; * however pmdaDynamicPMNS is maintained for backward compatibility. * * pmdaDynamicLookupName * Perform PMDA name lookup operations for the name callback, for dynamic * metrics. * * pmdaDynamicLookupPMID * Perform PMDA reverse name lookup operations for the PMID callback, for * dynamic metrics. * * pmdaDynamicLookupText * Perform PMDA help text lookup operations for dynamic metrics. * * pmdaDynamicMetricTable * Install a new metric table for the PMDA, after changes to the set of * metrics which the PMDA must export (IOW, dynamic metrics are in use). * * pmdaRehash * Update the metrictable within the pmdaExt structure with new (dynamic) * metrics and recompute the hash table used for optimised lookup. Aids * PMDAs with large numbers of metrics to get closer to directly mapped * PMID lookup time, rather than multiple linear table scans per fetch. * [NOTE: can be used by any interface version, not only dynamic metrics] */ typedef int (*pmdaUpdatePMNS)(pmdaExt *, pmdaNameSpace **); typedef int (*pmdaUpdateText)(pmdaExt *, pmID, int, char **); typedef void (*pmdaUpdateMetric)(pmdaMetric *, pmdaMetric *, int); typedef void (*pmdaCountMetrics)(int *, int *); PMDA_CALL extern void pmdaExtDynamicPMNS(const char *, int *, int, pmdaUpdatePMNS, pmdaUpdateText, pmdaUpdateMetric, pmdaCountMetrics, pmdaMetric *, int, pmdaExt *); PMDA_CALL extern void pmdaDynamicPMNS(const char *, int *, int, pmdaUpdatePMNS, pmdaUpdateText, pmdaUpdateMetric, pmdaCountMetrics, pmdaMetric *, int); PMDA_CALL extern int pmdaDynamicSetClusterMask(const char *, unsigned int); PMDA_CALL extern pmdaNameSpace *pmdaDynamicLookupName(pmdaExt *, const char *); PMDA_CALL extern pmdaNameSpace *pmdaDynamicLookupPMID(pmdaExt *, pmID); PMDA_CALL extern int pmdaDynamicLookupText(pmID, int, char **, pmdaExt *); PMDA_CALL extern void pmdaDynamicMetricTable(pmdaExt *); PMDA_CALL extern void pmdaRehash(pmdaExt *, pmdaMetric *, int); /* * Dynamic names interface (version 4) helper routines. * * pmdaTreePMID * when a pmdaNameSpace is being used, this provides * an implementation for the four.pmid() interface. * * pmdaTreeName * when a pmdaNameSpace is being used, this provides * an implementation for the four.name() interface. * * pmdaTreeChildren * when a pmdaNameSpace is being used, this provides * an implementation for the four.children() interface. * * pmdaTreeRebuildHash * iterate over a pmdaNameSpace and (re)build the hash * for any subsequent PMID -> name (reverse) lookups * * pmdaTreeSize * returns the numbers of entries in a pmdaNameSpace. */ PMDA_CALL extern int pmdaTreePMID(pmdaNameSpace *, const char *, pmID *); PMDA_CALL extern int pmdaTreeName(pmdaNameSpace *, pmID, char ***); PMDA_CALL extern int pmdaTreeChildren(pmdaNameSpace *, const char *, int, char ***, int **); PMDA_CALL extern void pmdaTreeRebuildHash(pmdaNameSpace *, int); PMDA_CALL extern int pmdaTreeSize(pmdaNameSpace *); PMDA_CALL extern int pmdaTreeCreate(pmdaNameSpace **); PMDA_CALL extern int pmdaTreeInsert(pmdaNameSpace *, pmID, const char *); PMDA_CALL extern void pmdaTreeRelease(pmdaNameSpace *); /* * PMDA instance domain cache support * * pmdaCacheStore * add entry into the cache, or change state, assigns internal * instance identifier * * pmdaCacheStoreKey * add entry into the cache, or change state, caller provides "hint" * for internal instance identifier * * pmdaCacheLookup * fetch entry based on internal instance identifier * * pmdaCacheLookupName * fetch entry based on external instance name * * pmdaCacheLookupKey * fetch entry based on key as "hint", like pmdaCacheStoreKey() * * pmdaCacheOp * service routines to load, unload, mark as write-thru, purge, * count entries, etc * * pmdaCachePurge * cull inactive entries * * pmdaCachePurgeCallback * cull inactive entries and invoke callback for private data * * pmdaCacheResize * set the maximum instance identifier */ PMDA_CALL extern int pmdaCacheStore(pmInDom, int, const char *, void *); PMDA_CALL extern int pmdaCacheStoreKey(pmInDom, int, const char *, int, const void *, void *); PMDA_CALL extern int pmdaCacheLookup(pmInDom, int, char **, void **); PMDA_CALL extern int pmdaCacheLookupName(pmInDom, const char *, int *, void **); PMDA_CALL extern int pmdaCacheLookupKey(pmInDom, const char *, int, const void *, char **, int *, void **); PMDA_CALL extern int pmdaCacheOp(pmInDom, int); PMDA_CALL extern int pmdaCachePurge(pmInDom, time_t); PMDA_CALL extern int pmdaCachePurgeCallback(pmInDom, time_t, void (*)(void *)); PMDA_CALL extern int pmdaCacheResize(pmInDom, int); #define PMDA_CACHE_LOAD 1 #define PMDA_CACHE_ADD 2 #define PMDA_CACHE_HIDE 3 #define PMDA_CACHE_CULL 4 #define PMDA_CACHE_EMPTY 5 #define PMDA_CACHE_SAVE 6 #define PMDA_CACHE_STRINGS 7 #define PMDA_CACHE_ACTIVE 8 #define PMDA_CACHE_INACTIVE 9 #define PMDA_CACHE_SIZE 10 #define PMDA_CACHE_SIZE_ACTIVE 11 #define PMDA_CACHE_SIZE_INACTIVE 12 #define PMDA_CACHE_REUSE 13 #define PMDA_CACHE_WALK_REWIND 14 #define PMDA_CACHE_WALK_NEXT 15 #define PMDA_CACHE_CHECK 16 #define PMDA_CACHE_REORG 17 #define PMDA_CACHE_SYNC 18 #define PMDA_CACHE_DUMP 19 #define PMDA_CACHE_DUMP_ALL 20 /* * Internal libpcp_pmda routines. * * __pmdaCntInst * Returns the number of instances for an entry in the instance domain * table. * * __pmdaStartInst * Setup for __pmdaNextInst to iterate over an instance domain. * * __pmdaNextInst * Step through an instance domain, returning instances one at a * time. * * __pmdaMainPDU * Use this when you need to override pmdaMain and construct * your own loop. * Call this function in the _body_ of your loop. * See pmdaMain code for an example. * Returns negative int on failure, 0 otherwise. * * __pmdaInFd * This returns the file descriptor that is used to get the * PDU from pmcd. * One may use the fd to do a select call in a custom main loop. * Returns negative int on failure, file descriptor otherwise. * * __pmdaCacheDumpAll and __pmdaCacheDump * print out cache contents */ PMDA_CALL extern int __pmdaCntInst(pmInDom, pmdaExt *); PMDA_CALL extern void __pmdaStartInst(pmInDom, pmdaExt *); PMDA_CALL extern int __pmdaNextInst(int *, pmdaExt *); PMDA_CALL extern int __pmdaMainPDU(pmdaInterface *); PMDA_CALL extern int __pmdaInFd(pmdaInterface *); PMDA_CALL extern void __pmdaCacheDumpAll(FILE *, int); PMDA_CALL extern void __pmdaCacheDump(FILE *, pmInDom, int); /* * Client Context support */ PMDA_CALL extern int pmdaGetContext(void); PMDA_CALL extern void __pmdaSetContext(int); /* * Event Record support */ PMDA_CALL extern int pmdaEventNewArray(void); PMDA_CALL extern int pmdaEventResetArray(int); PMDA_CALL extern int pmdaEventReleaseArray(int); PMDA_CALL extern int pmdaEventAddRecord(int, struct timeval *, int); PMDA_CALL extern int pmdaEventAddMissedRecord(int, struct timeval *, int); PMDA_CALL extern int pmdaEventAddParam(int, pmID, int, pmAtomValue *); PMDA_CALL extern pmEventArray *pmdaEventGetAddr(int); /* * High Resolution Timer Event Record support */ PMDA_CALL extern int pmdaEventNewHighResArray(void); PMDA_CALL extern int pmdaEventResetHighResArray(int); PMDA_CALL extern int pmdaEventReleaseHighResArray(int); PMDA_CALL extern int pmdaEventAddHighResRecord(int, struct timespec *, int); PMDA_CALL extern int pmdaEventAddHighResMissedRecord(int, struct timespec *, int); PMDA_CALL extern int pmdaEventHighResAddParam(int, pmID, int, pmAtomValue *); PMDA_CALL extern pmHighResEventArray *pmdaEventHighResGetAddr(int); /* * Event Queue support */ PMDA_CALL extern int pmdaEventNewQueue(const char *, size_t); PMDA_CALL extern int pmdaEventNewActiveQueue(const char *, size_t, unsigned int); PMDA_CALL extern int pmdaEventQueueShutdown(int); PMDA_CALL extern int pmdaEventQueueHandle(const char *); PMDA_CALL extern int pmdaEventQueueAppend(int, void *, size_t, struct timeval *); PMDA_CALL extern int pmdaEventQueueClients(int, pmAtomValue *); PMDA_CALL extern int pmdaEventQueueCounter(int, pmAtomValue *); PMDA_CALL extern int pmdaEventQueueBytes(int, pmAtomValue *); PMDA_CALL extern int pmdaEventQueueMemory(int, pmAtomValue *); typedef int (*pmdaEventDecodeCallBack)(int, void *, size_t, struct timeval *, void *); PMDA_CALL extern int pmdaEventQueueRecords(int, pmAtomValue *, int, pmdaEventDecodeCallBack, void *); PMDA_CALL extern int pmdaEventNewClient(int); PMDA_CALL extern int pmdaEventEndClient(int); PMDA_CALL extern int pmdaEventClients(pmAtomValue *); typedef int (*pmdaEventApplyFilterCallBack)(void *, void *, size_t); typedef void (*pmdaEventReleaseFilterCallBack)(void *); PMDA_CALL extern int pmdaEventSetFilter(int, int, void *, pmdaEventApplyFilterCallBack, pmdaEventReleaseFilterCallBack); PMDA_CALL extern int pmdaEventSetAccess(int, int, int); PMDA_CALL extern char *__pmdaEventPrint(const char *, int, char *, int); PMDA_CALL extern void pmdaInterfaceMoved(pmdaInterface *); /* * Privileged PMDA services, as offered by pmdaroot(1). */ PMDA_CALL extern int pmdaRootConnect(const char *); PMDA_CALL extern void pmdaRootShutdown(int); PMDA_CALL extern int pmdaRootContainerHostName(int, const char *, int, char *, int); PMDA_CALL extern int pmdaRootContainerProcessID(int, const char *, int); PMDA_CALL extern int pmdaRootContainerCGroupName(int, const char *, int, char *, int); PMDA_CALL extern int pmdaRootProcessStart(int, int, const char *, int labellen, const char *, int, int *, int *, int *); PMDA_CALL extern int pmdaRootProcessWait(int, int, int *); PMDA_CALL extern int pmdaRootProcessTerminate(int, int); #ifdef __cplusplus } #endif #endif /* PCP_PMDA_H */