ADCT Python
Python client API implementation for publishing ADCT data
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Protected Member Functions | Static Protected Attributes | List of all members
adctk.ldms_publisher.LDMSPipeMessagePublisher Class Reference

Publish data over a pipe to ldms_message_publish once via pipe recreated at each call. More...

Inheritance diagram for adctk.ldms_publisher.LDMSPipeMessagePublisher:
Inheritance graph
[legend]
Collaboration diagram for adctk.ldms_publisher.LDMSPipeMessagePublisher:
Collaboration graph
[legend]

Public Member Functions

 __init__ (self)
 
int config (self, **kwargs)
 Configure the plugin with the options given.
 
int initialize (self)
 Set up any resources needed for reuse in publish().
 
 publish (self, builder.Builder b)
 
 finalize (self)
 Clean up any resources set up in initialize (files, pipes, etc).
 
- Public Member Functions inherited from adctk.publisher.Publisher
str name (self)
 Get the name which a factory or error message should use.
 
str version (self)
 
dict[str, str] get_option_defaults (self)
 
None pause (self)
 Cause publish calls to be ignored until resume is called.
 
None resume (self)
 Cancel an prior calls to pause.
 
int publish_str (self, str json_string)
 
int publish_obj (self, obj)
 

Public Attributes

 plugin_prefix
 
 defaults
 
 prog
 
 port
 
 auth
 
 tag
 
 host
 
 timeout
 
 mode
 
 state
 
- Public Attributes inherited from adctk.publisher.Publisher
 defaults
 
 plugin_prefix
 
 paused
 
 state
 
 mode
 

Protected Member Functions

int _post (self, msg)
 
- Protected Member Functions inherited from adctk.publisher.Publisher
str _get (self, dict[str, str] opts, str field)
 
bool _get_bool (self, dict[str, str] opts, str field)
 

Static Protected Attributes

str _name = "ldms-pipe-message"
 
str _version = "1.0.0"
 
- Static Protected Attributes inherited from adctk.publisher.Publisher
str _name = "unknown"
 
str _version = "0.0.0"
 

Additional Inherited Members

- Static Public Member Functions inherited from adctk.publisher.Publisher
tuple[float] get_timeout_defaults ()
 Get the adc server connect and response timeouts defined in the environment ADC_SERVER_CONNECT_TIMEOUT and ADC_SERVER_POST_TIMEOUT as a tuple or default values if not defined.
 
str get_url_default ()
 Get the alleged adc server url base from environment ADC_SERVER_URL or the default if it is not present.
 
str get_port_default ()
 Get the adc server port number to use if it is properly defined in the environment ADC_SERVER_PORT or the default if it is not.
 
- Static Public Attributes inherited from adctk.publisher.Publisher
 API_VERSION = adc_version.AdcVersion()._dict()
 

Detailed Description

Publish data over a pipe to ldms_message_publish once via pipe recreated at each call.

Environment Variables

Constructor & Destructor Documentation

◆ __init__()

adctk.ldms_publisher.LDMSPipeMessagePublisher.__init__ (   self)

Reimplemented from adctk.publisher.Publisher.

Reimplemented in adctk.ldms_publisher.LDMSSystemMessagePublisher.

224 def __init__(self):
225 super().__init__()
226 self.plugin_prefix = "ADC_LDMS_MESSAGE_PUBLISH_PLUGIN_"
227 self.defaults = _defaults_pipe_message
228 self.prog: str = None
229 self.port: str = None
230 self.auth: str = None
231 self.timeout: int = 2
232 self.tag: str = None
233 self.host: str = None
234

Member Function Documentation

◆ _post()

int adctk.ldms_publisher.LDMSPipeMessagePublisher._post (   self,
  msg 
)
protected

Reimplemented in adctk.ldms_publisher.LDMSSystemMessagePublisher.

258 def _post(self, msg) ->int:
259 try:
260 cmd = [self.prog,
261 "-t", "json",
262 "-x", "sock",
263 "-p", self.port,
264 "-a", self.auth,
265 "-m", self.tag,
266 "-h", self.host
267 ]
268 log.logger.info("LDMSPipe-publisher command: %s", cmd)
269 process = subprocess.Popen(cmd, stdin=subprocess.PIPE,
270 stdout=subprocess.PIPE, stderr=subprocess.PIPE,
271 text=True)
272 process.stdin.write(msg)
273 process.stdin.flush()
274 process.stdin.close()
275 stdout, stderr = process.communicate(timeout=self.timeout)
276 output_string = stdout.decode("utf-8")
277 error_string = stderr.decode("utf-8")
278 log.logger.debug("Output: %s Error: %s", output_string, error_string)
279 ret = process.returncode
280 if ret != 0:
281 log.logger.warning("LDMSPipe-publisher: publish process failed with error: %d",
282 ret)
283 except subprocess.TimeoutExpired:
284 process.kill()
285 stdout, stderr = process.communicate()
286 log.logger.warning("LDMSPipe-publisher: timeout expired")
287 return ret
288

◆ config()

int adctk.ldms_publisher.LDMSPipeMessagePublisher.config (   self,
**  kwargs 
)

Configure the plugin with the options given.

For plugin QQQ, Environment variables ADC_QQQ_PLUGIN_<key> will override the plugin default for any key not defined in kwargs. Here QQQ is plugin.name().upper(). Generic options:

Parameters
kwargsIf env_prefix is included in kwargs, replaces plugin environment variables with those which are prefixed using env_prefix.
env_prefixTypically, env_prefix is set to "PPP_ADC_QQQ_PLUGIN_" if application PPP wants to override the defaults of adctk plugin QQQ. Here QQQ is plugin.name().upper(). If no prefixed version of the variable is present, the plugin default is used. kwargs takes precedence over environment variables. Plugin defaults are used if not overridden by kwargs or an environment variable.
Returns
int non-zero if configuration cannot be completed using the arguments, environment, and default.

Reimplemented from adctk.publisher.Publisher.

Reimplemented in adctk.ldms_publisher.LDMSSystemMessagePublisher.

235 def config(self, **kwargs) -> int:
236 self.prog = self._get(kwargs, "PROG")
237 self.port = self._get(kwargs, "PORT")
238 self.auth = self._get(kwargs, "AUTH")
239 self.tag = self._get(kwargs, "TAG")
240 self.host = self._get(kwargs, "HOST")
241 timeout = self._get(kwargs, "TIMEOUT")
242 try:
243 x = int(timeout)
244 self.timeout = x
245 except ValueError:
246 log.logger.error("LDMSPipe-publisher TIMEOUT %s is invalid. integer needed.", timeout)
247 return 0
248

◆ finalize()

adctk.ldms_publisher.LDMSPipeMessagePublisher.finalize (   self)

Clean up any resources set up in initialize (files, pipes, etc).

Reimplemented from adctk.publisher.Publisher.

295 def finalize(self):
296 pass # nothing to do here. LDMSPipeMessagePublisher.finalize
297

◆ initialize()

int adctk.ldms_publisher.LDMSPipeMessagePublisher.initialize (   self)

Set up any resources needed for reuse in publish().

Reimplemented from adctk.publisher.Publisher.

249 def initialize(self) -> int:
250 if self.mode == publisher.Publisher.Mode.CONFIG:
251 self.config()
252 if self.mode != publisher.Publisher.Mode.INIT:
253 self.state = publisher.Publisher.State.ERR
254 return errno.EINVAL
255 self.mode = publisher.Publisher.Mode.PUB_OR_FINAL
256 return 0
257

◆ publish()

adctk.ldms_publisher.LDMSPipeMessagePublisher.publish (   self,
builder.Builder  b 
)
publish json extracted from builder to _base_url server

Reimplemented from adctk.publisher.Publisher.

289 def publish(self, b: builder.Builder):
290 """publish json extracted from builder to _base_url server"""
291 s = b.get_json_dump()
292 ret = self._post(s)
293 return ret
294

Member Data Documentation

◆ _name

str adctk.ldms_publisher.LDMSPipeMessagePublisher._name = "ldms-pipe-message"
staticprotected

◆ _version

str adctk.ldms_publisher.LDMSPipeMessagePublisher._version = "1.0.0"
staticprotected

◆ auth

adctk.ldms_publisher.LDMSPipeMessagePublisher.auth

◆ defaults

adctk.ldms_publisher.LDMSPipeMessagePublisher.defaults

◆ host

adctk.ldms_publisher.LDMSPipeMessagePublisher.host

◆ mode

adctk.ldms_publisher.LDMSPipeMessagePublisher.mode

◆ plugin_prefix

adctk.ldms_publisher.LDMSPipeMessagePublisher.plugin_prefix

◆ port

adctk.ldms_publisher.LDMSPipeMessagePublisher.port

◆ prog

adctk.ldms_publisher.LDMSPipeMessagePublisher.prog

◆ state

adctk.ldms_publisher.LDMSPipeMessagePublisher.state

◆ tag

adctk.ldms_publisher.LDMSPipeMessagePublisher.tag

◆ timeout

adctk.ldms_publisher.LDMSPipeMessagePublisher.timeout

The documentation for this class was generated from the following file: