PMISTART(3)
π NAME π
okay bestie, gather round π pmiStart β she's the function that establishes a new LOGIMPORT context. That's it. That's the whole job. Slay.
β¨ C SYNOPSIS β¨
#include <pcp/pmapi.h>
#include <pcp/import.h>
int pmiStart(const char *archive, int flags);
cc ... -lpcp_import -lpcp
like, include both headers, call her with an archive and some flags, and link against -lpcp_import and -lpcp. periodt.
π Perl SYNOPSIS π
use PCP::LogImport;
pmiStart($archive, $flags);
same energy, Perl edition π«Ά
π Python SYNOPSIS π
from pcp import pmi
log = pmi.pmiLogImport(archive, flags)
and in Python land you grab it as a pmiLogImport object, no cap π¦
π DESCRIPTION π
So basically, pmiStart is part of the Performance Co-Pilot Log Import API (peep LOGIMPORT(3) for the whole lore), and what she does is create a brand new context. Every single context keeps track of all of this state and metadata, and honestly? It's giving very organised queen:
- The base name β that's
archiveβ for the physical files that make up the output PCP archive. - The source hostname for the data that's gonna get written into the PCP archive. She defaults to the hostname of the localhost, but you can set it with
pmiSetHostname(3). - The source timezone for the PCP archive. Defaults to the timezone of the localhost, but you can set it with
pmiSetTimezone(3). - The output archive version number for the PCP archive. Defaults to the traditional version 2 format, but you can set it with
pmiSetVersion(3). - Metrics and instance domains, as defined by
pmiAddMetric(3). - Instances for each instance domain, as defined by
pmiAddInstance(3). - Handles, as defined by
pmiGetHandle(3). Each handle is a metric-instance pair, and each metric-instance pair may have an associated value in each record written to the output PCP archive. - An optional set of data values for one or more metric-instance pairs β ready for the next record to be written to the output PCP archive β as defined by calls to
pmiPutValue(3)orpmiPutValueHandle(3).
Now, the flags argument is a bitwise-OR of zero or more of these constants, and yes you're gonna want to know all of them π
PMI_INHERITβ the new context inherits any and all metadata (metrics, instance domains, instances and handles) from the current context. BUT β the basename for the output PCP archive, the source hostname, the source timezone and any data values from the current context are not inherited. And lowkey important: if this is the first call topmiStart, the metadata will be empty, independent of whetherPMI_INHERITis set. πPMI_APPENDβ opens an existing PCP archive for appending instead of creating a new one. The archive label (hostname, timezone, version, start timestamp) is read from the existingarchive.metafile and used to initialise the new context. The temporal index is read to seed the last-written timestamp; all subsequentpmiWrite(3)calls must use timestamps strictly later than this value. Thearchive.metaandarchive.indexfiles are opened in read/write mode and positioned at end-of-file; the highest-numbered data volume is opened in append mode. Metrics and instance domains must still be registered viapmiAddMetric(3)andpmiAddInstance(3)before callingpmiPutValue(3)β and if the metric descriptor is already present in the archive, the duplicate entry inarchive .metais harmless and will be ignored by readers. And if the archive files don't exist yet?PMI_APPENDbehaves identically to creating a new archive (no flags). iconic behaviour honestly π
PMI_APPEND and PMI_INHERIT may be used together π The inherited metric and instance-domain definitions get carried into the new context, and when the archive is opened on the first pmiWrite(3) call, each inherited descriptor is checked against what's already on disk: compatible descriptors are silently skipped (no duplicate written), and incompatible ones are rejected with an appropriate error (e.g. PM_ERR_LOGCHANGETYPE). When the previous context was writing to the same archive, every inherited descriptor already exists on disk, so the combination is effectively a no-op beyond convenience. like, cute but also doing nothing π§
If flags is zero, or neither PMI_INHERIT nor PMI_APPEND is set, the new context is created with no metadata and a new archive will be created from scratch. fresh start energy β¨
Also bestie, heads up: since no physical files for the output PCP archive get created until the first call to pmiWrite(3) or pmiPutResult(3), archive could be NULL β which creates a convenience context that's populated with metadata to be inherited by subsequent contexts. very main character of her.
The return value is a context identifier that could be used in a subsequent call to pmUseContext(3), and the new context becomes the current context, which persists for all subsequent calls up to either another pmiStart call or a call to pmiUseContext(3) or a call to pmiEnd(3).
π DIAGNOSTICS π
When creating a new archive (neither PMI_APPEND nor any other flag that implies file creation), it is an error if the physical files archive.0 and/or archive.index and/or archive.meta already exist β but plot twist, this is not discovered until the first attempt is made to output some data by calling pmiWrite(3) or pmiPutResult(3). So pmiStart always returns a positive context identifier. no early warning, she's just built like that π
When PMI_APPEND is set and the archive files do not exist, pmiStart silently falls back to creating a new archive, which makes it safe to use PMI_APPEND unconditionally on the first invocation of a data collector. so forgiving, we love a flexible queen πΈ
π₯ SEE ALSO π₯
LOGIMPORT(3)PMAPI(3)pmiAddInstance(3)pmiAddMetric(3)pmiEnd(3)pmiErrStr(3)pmiGetHandle(3)pmiPutLabel(3)pmiPutResult(3)pmiPutText(3)pmiPutValue(3)pmiPutValueHandle(3)pmiSetHostname(3)pmiSetTimezone(3)pmiSetVersion(3)pmiUseContext(3)pmiWrite(3)
and that's the whole page, bestie π«Ά this one ships under Performance Co-Pilot, filed as PMISTART(3) in the Library Functions Manual. go forth and start some contexts πβ¨π
π¦ where this page comes from
- arch rolling: pcp 7.2.2-2 Β· GPL-2.0-or-later AND LGPL-2.1-or-later AND CC-BY-3.0
- fedora 43: pcp-doc 7.2.1-1.fc43
- fedora 43: pcp-doc 7.2.2-1.fc43
- fedora 43: pcp-doc 7.2.2-2.fc43 Β· GPL-2.0-or-later AND CC-BY-3.0
- fedora 44: pcp-doc 7.2.1-1.fc44
- fedora 44: pcp-doc 7.2.2-1.fc44
- fedora 44: pcp-doc 7.2.2-2.fc44 Β· GPL-2.0-or-later AND CC-BY-3.0
- ubuntu stonking: libpcp4-dev 7.2.1-2build1
- Copyright (c) 2010 Ken McDonell. All Rights Reserved
- Copyright (c) 2018,2022 Red Hat
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms