Metadata-Version: 2.1
Name: event_metrics
Version: 0.2.0
Summary: An embedded, event-time metric collection library
Home-page: UNKNOWN
Author: simon-mo
Author-email: xmo@berkeley.edu
License: UNKNOWN
Description: 
        Event Metrics
        -------------
        
        An embedded, event-time metric collection library built for serving system
        --------------------------------------------------------------------------
        
        Metric systems like prometheus aggregate metric at "processing time", whenever the scraper is
        able to scrape the metric. ``event_metrics`` capture and record metrics at event time, when the
        event happens.
        
        Features
        ^^^^^^^^
        
        Comparing to other metric system, the ``event_metrics`` library:
        
        
        * Write data to sqlite3 database to keep low-memory footprint
        * Minimal dependency (only requires numpy for numeric aggregation)
        * Aggregate with the full data by default (no reservior sampling)
        * Allow select from past duration with timedelta windowing
        * Timestamp all observation by default
        * Small API footprint: ``observe`` and ``query`` is all you need to know
        * Compute raw timeseries with different aggregation strategies:
        
          * Scalers: last, min, max, mean, count, sum
          * Buckets for histogram
          * Percentiles for summary
          * Array and timestamps for native python wrangling
        
        * Metrics can be labeled with arbitrary key value pair and querying supports
          multidimensional label matching.
        
        Install
        ^^^^^^^
        
        
        * Install from source: ``pip install -e .``
        * PyPI package is work in progress
        
        Usage
        ^^^^^
        
        .. code-block:: python
        
           from event_metrics import MetricConnection
        
           conn = MetricConnection("/tmp/event_metrics_demo")
        
           conn.observe("latency", 1.2)
           conn.increment("counter", -1)
        
           # labeling
           conn.observe("latency", 2.0, labels={"service": "myapp", "other": "label"})
        
           # querying
           (conn.query("latency", labels={"service":"myapp"})
                 # select from past duration using one of the following
                .from_beginning()
                .from_timestamp(...)
                .from_timedelta(...)
        
                 # perform aggregation using one of the following
                .to_scaler(agg="last/min/max/mean/count/sum") # counter, guage
                .to_buckets(buckets=[1, 5, 10], cumulative=False) # histogram
                .to_percentiles(percnetiles=[50, 90, 99]) # summary
                .to_array() # -> value array
                .to_timestamps() # -> timestamp array
                .to_timestamps_array() # -> 2 array, (timestamp, value array)
           )
        
        Speed
        ^^^^^
        
        The library is *fast enough*. It can ingest about 34,000 data point
        per seconds:
        
        You can run ``pytest tests -k bench`` to generate benchmark on local hardware:
        
        .. code-block::
        
           -------------------------------------------------- benchmark: 1 tests --------------------------------------------------
           Name (time in us)            Min       Max     Mean  StdDev   Median     IQR  Outliers  OPS (Kops/s)  Rounds  Iterations
           ------------------------------------------------------------------------------------------------------------------------
           test_bench_ingestion     25.3340  297.9320  28.8541  9.1582  26.8090  0.8650   521;814       34.6571    6496           1
           ------------------------------------------------------------------------------------------------------------------------
        
Platform: UNKNOWN
Requires-Python: ==3.*,>=3.5.0
Provides-Extra: dev
