Source code for acia.attribute

"""Attribute usage"""

import logging
import os
from datetime import datetime, timezone

import networkx as nx
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS

from acia.base import Overlay

logger = logging.getLogger(__name__)

TOKEN = "58M8R17lQgh-U17snMPjya139MFD9_de2KqseKmJihcAZ6mkohozd-9-rvz71SZLI7GI1Qz8Nii2QxI1QjcVkw=="
URL = "https://worldofmicrobes.ddnss.org:8086"
ORG = "com.microbes"

TRACK_USER = os.getenv("ATTRIBUTE_TRACK_USER", "0") == "1"
TRACK_USAGE = os.getenv("ATTRIBUTE_TRACK_USAGE", "1") == "1"


[docs] def get_user() -> str: """Obtain the current username or return 'Anonymous' if tracking the user is not enabled by the ATTRIBUTE_TRACK_USER env variable. Returns: str: Current username or 'Anonymous' """ user = "Anonymous" if TRACK_USER: user = ( os.environ.get("JUPYTERHUB_USER") or os.environ.get("USER") or os.environ.get("USERNAME") or "Anonymous" ) return user
#### Attribute functionality
[docs] def attribute_segmentation(overlay: Overlay, segmentation_processor=None): if TRACK_USAGE is False: logger.info("Usage tracking disabled!") return # pylint: disable=broad-except try: user = get_user() bucket = "segmentation" # initialize client from environment properties with InfluxDBClient(url=URL, token=TOKEN) as client: # setup write api write_api = client.write_api(write_options=SYNCHRONOUS) # get current time now = datetime.now(timezone.utc) point = Point("segmentation") point.tag("user", user) if segmentation_processor is not None: point.tag("method", segmentation_processor.__class__) # add the count field point.field("num_cells", len(overlay)) point.field("num_images", len(overlay.frames())) # set the time point.time(now, WritePrecision.S) # write (will already be batched) write_api.write(bucket=bucket, record=point, org=ORG) except Exception as e: logger.exception(e)
[docs] def attribute_tracking( tracking_ov: Overlay, tracklet_graph: nx.DiGraph, tracking_graph: nx.DiGraph, tracker=None, ): if TRACK_USAGE is False: logger.info("Usage tracking disabled!") return # pylint: disable=broad-except try: user = get_user() bucket = "tracking" # initialize client from environment properties with InfluxDBClient(url=URL, token=TOKEN) as client: # setup write api write_api = client.write_api(write_options=SYNCHRONOUS) # get current time now = datetime.now(timezone.utc) point = Point("tracking") point.tag("user", user) if tracker is not None: point.tag("method", tracker.__class__) # add the count field point.field("num_cells", len(tracking_ov)) point.field("tracking_nodes", tracking_graph.number_of_nodes()) point.field("tracking_edges", tracking_graph.number_of_edges()) if tracklet_graph is not None: point.field("tracklets_nodes", tracklet_graph.number_of_nodes()) point.field("tracklets_edges", tracklet_graph.number_of_edges()) point.field("num_images", len(tracking_ov.frames())) # set the time point.time(now, WritePrecision.S) # write (will already be batched) write_api.write(bucket=bucket, record=point, org=ORG) except Exception as e: logger.exception(e)