Provided by: libpcp3-dev_5.3.7-1_amd64 bug

NAME

       pmNewContext - establish a new PMAPI context

C SYNOPSIS

       #include <pcp/pmapi.h>

       int pmNewContext(int type, const char *name);

       cc ... -lpcp

DESCRIPTION

       An application using the Performance Metrics Application Programming Interface (PMAPI) may
       manipulate several concurrent contexts, each  associated  with  a  source  of  performance
       metrics,  e.g.  pmcd(1)  on  some host, or a set of archive logs of performance metrics as
       created by pmlogger(1), or a standalone connection on the local host that does not involve
       pmcd(1).

       pmNewContext  may  be  used  to  establish  a  new  context.  The source of the metrics is
       identified by name, and may be either a host name (type is PM_CONTEXT_HOST), or  a  comma-
       separated  list  of names referring to a set of archive logs (type is PM_CONTEXT_ARCHIVE).
       Each element of the list may either be the base name common to all of the  physical  files
       of an archive log or the name of a directory containing archive logs.

       For a type of PM_CONTEXT_HOST, in addition to identifying a host the name may also be used
       to encode additional optional information  in  the  form  of  a  pmcd(1)  port  number,  a
       pmproxy(1)    hostname    and    a    proxy    port   number.   For   example   the   name
       "app23:14321,4321@firewall.example.com:11111" specifies a connection  on  port  14321  (or
       port  4321  if  14321  is  unavailable)  to  pmcd(1)  on  the host app23 via port 11111 to
       pmproxy(1) on the host firewall.example.com.

       For a type of PM_CONTEXT_ARCHIVE, each element of the list of names in name  may  also  be
       the  name  of  any of the physical files of an archive, e.g.  myarchive.meta (the metadata
       file) or myarchive.index (the temporal index) or myarchive.0 (the first data volume of the
       archive)  or  myarchive.0.bz2  or  myarchive.0.bz  (the  first data volume compressed with
       bzip2(1)) or myarchive.0.gz or myarchive.0.Z  or  myarchive.0.z  (the  first  data  volume
       compressed with gzip(1)), myarchive.1 or myarchive.3.bz2 or myarchive.42.gz etc.

       If  more  than  one  archive is specified for a type of PM_CONTEXT_ARCHIVE, there are some
       restrictions on the archives within the set:

       •  The archives must all have been generated on the same host.

       •  The archives must not overlap in time.

       •  The archives must all have been created using the same time zone.

       •  The PMID of each metric should be the same in all of the archives.  Multiple PMIDs  are
          currently  tolerated  by  using  the  first  PMID  defined for each metric and ignoring
          subsequent PMIDs.

       •  The type of each metric must be the same in all of the archives.

       •  The semantics of each metric must be the same in all of the archives.

       •  The units of each metric must be the same in all of the archives.

       •  The instance domain of each metric must be the same in all of the archives.

       In the case where type is PM_CONTEXT_LOCAL, name  is  ignored,  and  the  context  uses  a
       standalone  connection  to the PMDA methods used by pmcd(1).  When this type of context is
       used, the range of accessible  performance  metrics  is  constrained  to  those  from  the
       operating system, and optionally the ``proc'', ``sample'' and ``ib'' PMDAs.

       In  the  case  where type is PM_CONTEXT_HOST, additional flags can be added to the type to
       indicate if the connection to pmcd(1) should be  encrypted  (PM_CTXFLAG_SECURE),  deferred
       (PM_CTXFLAG_SHALLOW)  and  if the file descriptor used to communicate with pmcd(1), should
       not be shared across contexts (PM_CTXFLAG_EXCLUSIVE).   Both  the  PM_CTXFLAG_SHALLOW  and
       PM_CTXFLAG_EXCLUSIVE flags are now deprecated and ignored.

       The  initial  instance  profile is set up to select all instances in all instance domains.
       In the case of a set of archives, the initial collection time is also set to zero, so that
       an  initial  pmFetch(3) will result in the earliest set of metrics being returned from the
       set of archives.

       Once established, the association between a context and a source of metrics is  fixed  for
       the  life  of  the context, however routines are provided to independently manipulate both
       the instance profile (see pmAddProfile(3) and pmDelProfile(3)) and the collection time for
       archives (see pmSetMode(3)).

       pmNewContext returns a handle that may be used with subsequent calls to pmUseContext(3).

       The  new  context  remains  the  current PMAPI context for all subsequent calls across the
       PMAPI, until another call to pmNewContext(3) is made, or the context is explicitly changed
       with a call to pmDupContext(3) or pmUseContext(3), or destroyed using pmDestroyContext(3).

       When  attempting to connect to a remote pmcd(1) on a machine that is booting, pmNewContext
       could  potentially  block  for  a  long  time  until  the  remote  machine  finishes   its
       initialization.   pmNewContext  will  abort  and return an error if the connection has not
       been established after some specified interval has elapsed.  The  default  interval  is  5
       seconds.   This  may  be  modified by setting PMCD_CONNECT_TIMEOUT in the environment to a
       real number of seconds for the desired timeout.  This is most useful in  cases  where  the
       remote  host  is at the end of a slow network, requiring longer latencies to establish the
       connection correctly.

CAVEATS

       When using a  type  of  PM_CONTEXT_LOCAL,  the  operating  system  PMDA  may  export  data
       structures directly from the kernel, which means that the pmNewContext caller should be an
       executable program compiled for the same object code format as the booted kernel.

       In addition, applications using a PM_CONTEXT_LOCAL context must be single-threaded because
       the  various  DSO  PMDAs  may  not  be  thread-safe.   This restriction is enforced at the
       PMAPI(3), where routines may return the error code PM_ERR_THREAD if  the  library  detects
       calls from more than one thread.

       Applications  that  use gethostbyname(3) should exercise caution because the static fields
       in struct hostent may not  be  preserved  across  some  PMAPI(3)  calls.   In  particular,
       pmNewContext(3) and pmReconnectContext(3) both may call gethostbyname(3) internally.

DIAGNOSTICS

       PM_ERR_PERMISSION

              No permission to perform requested operation

       PM_ERR_CONNLIMIT

              PMCD connection limit for this host exceeded

       PM_ERR_NOCONTEXT

              Requested    context    type   was   not   PM_CONTEXT_LOCAL,   PM_CONTEXT_HOST   or
              PM_CONTEXT_ARCHIVE.

       PM_ERR_LOGOVERLAP

              Archives overlap in time

       PM_ERR_LOGHOST

              Archives differ by host

       PM_ERR_LOGTIMEZONE

              Archives differ by time zone.

       PM_ERR_LOGCHANGETYPE

              The type of a metric differs among archives

       PM_ERR_LOGCHANGESEM

              The semantics of a metric differs among archives

       PM_ERR_LOGCHANGEINDOM

              The instance domain of a metric differs among archives

       PM_ERR_LOGCHANGEUNITS

              The units of a metric differs among archives

ENVIRONMENT

       PMCD_CONNECT_TIMEOUT
              Timeout period (in seconds) for pmcd(1) connection attempts.

       PMCD_PORT
              TCP/IP port(s) for connecting to pmcd(1), historically was 4321 and  more  recently
              the  officially registered port 44321; in the current release, pmcd listens on both
              these ports as a transitional arrangement.  If used, should  be  set  to  a  comma-
              separated list of numerical port numbers.

       PMDA_PATH
              When  searching for PMDAs to be loaded when type is PM_CONTEXT_LOCAL, the PMDA_PATH
              environment variable may be used to define a search path of directories to be  used
              to    locate    the    PMDA    executables.     The    default   search   path   is
              $PCP_SHARE_DIR/lib:/usr/pcp/lib.

SEE ALSO

       pmcd(1),  pmproxy(1),  pmAddProfile(3),  PMAPI(3),  pmDelProfile(3),  pmDestroyContext(3),
       pmDupContext(3),  pmGetConfig(3),  pmReconnectContext(3),  pmSetMode(3),  pmUseContext(3),
       pmWhichContext(3), pcp.conf(5) and pcp.env(5).