Skip to main content


Synth's series generator creates streams of events based on different 'processes' (a process here can be an auto-correlated process, a poisson process, a cyclical process etc.).

The series generators are used in several different contexts:

  • Creating fake events for event-driven systems
  • Modelling time-independent events like 'orders' on a website or 'requests' made to a web server
  • Modelling seasonal behaviour, like an increase in flight frequency for a given airline over the summer

Date Time#

All series are modelled on so called 'Naive Date Times' - that is 'Date Times' that do not have a timezone. This can be interpreted as Timestamps in UTC. There is future work to improve functionality to add other chrono types.

The format of a series can be set by using the optional format field; if format is omitted, the default format is %Y-%m-%d %H:%M:%S.


The series generators will often make use of durations as generation parameters. A duration as a quantity like '1 hour' or '5.7 milliseconds'.

The series generators use humantime to make it easy to specify human readable quantities like 3hr 5m 2s.


The incrementing series simply increments at a fixed duration. This could be for example a stock ticker.

The incrementing series has 2 parameters:

  • start: The time at which the first event occurs
  • increment: The increment between two consecutive events


Below is an example stock ticker for AAPL sampled at regular intervals every minute.

{    "type": "array",    "length": {        "type": "number",        "constant": 10    },    "content": {        "type": "object",        "ticker": {            "type": "string",            "pattern": "AAPL"        },        "timestamp": {            "type": "series",            "format" : "%Y-%m-%d %H:%M:%S",            "incrementing": {                "start" : "2021-02-01 09:00:00",                "increment" : "1m"            }        },        "price": {            "type": "number",            "subtype" : "f64",            "range" : {                "high": 105,                 "low": 100,                "step": 0.01            }        }    }}


The poisson series models independent events which occur at random, but which tend to occur at an average rate when viewed as a group.

One example of a poisson process could be earthquakes occurring during the course of a year, or customers arriving at a store, or cars crossing a bridge etc.

The poisson series has 2 parameters:

  • start: The time at which the first event occurs
  • rate: The average duration between two consecutive events


The below is an example HTTP server, which was brought up on a given date and has an average of 1 request every 1 minute.

{    "type": "array",    "length": {        "type": "number",        "constant": 10    },    "content": {        "type": "object",        "ip": {            "type": "string",            "faker": {                "generator": "ipv4"            }        },        "timestamp": {            "type": "series",            "format": "%d/%b/%Y:%H:%M:%S",            "poisson": {                "start": "10/Oct/2000:13:55:36",                "rate": "1m"            }        },        "request": {            "type": "string",            "categorical": {                "GET /index.html HTTP/1.0": 10,                "GET /home.html HTTP/1.0": 5,                "GET /login.html HTTP/1.0": 3            }        },        "response_code": {            "type": "number",            "subtype": "u64",            "categorical": {                "200": 95,                "500": 5            }        },        "response_size": {            "type": "number",            "range": {                "low": 500,                "high": 3000,                "step": 1            }        }    }}


The cyclical series models events which have a 'cyclical' or 'periodic' frequency.

For example, the frequency of orders placed in an online store peaks during the day and is at it's lowest during the night.

The cyclical series has 4 parameters:

  • start: The time at which the first event occurs
  • max_rate: The maximum average duration between two events.
  • min_rate: The minimum average duration between two events
  • period: The period of the cyclical series.


The below is a minimal example of orders being placed in an online store.

{    "type": "array",    "length": {        "type": "number",        "constant": 10    },    "content": {        "type": "object",        "order_id": {            "type": "number",            "id": {}        },        "item": {            "type": "string",            "categorical": {                "t-shirt": 4,                "jeans": 1,                "jacket": 1,                "belt": 2            }        },        "timestamp": {            "type": "series",            "cyclical": {                "start": "2021-02-01 00:00:00",                "period": "1d",                "min_rate": "10m",                "max_rate": "30s"            }        }    }}


The zip series combines 2 or more series together by zipping the output together. That is, the two series are super imposed.

The zip series has 1 parameter:

  • series: The child series to be zipped together
{    "type": "array",    "length": {        "type": "number",        "constant": 10    },    "content": {        "type": "object",        "order_id": {            "type": "number",            "id": {}        },        "item": {            "type": "string",            "categorical": {                "t-shirt": 4,                "jeans": 1,                "jacket": 1,                "belt": 2            }        },        "timestamp": {            "type": "series",            "zip": {                "series": [                    {                        "cyclical": {                            "start": "2021-02-01 00:00:00",                            "period": "1w",                            "min_rate": "1m",                            "max_rate": "1s"                        }                    },                    {                        "cyclical": {                            "start": "2021-02-01 00:00:00",                            "period": "1d",                            "min_rate": "10m",                            "max_rate": "30s"                        }                    }                ]            }        }    }}