timechart

Create a time series chart. Time charts support multiple series and can be combined with view events.

view timechart -o {
  id: 'string',
  title: 'string',
  duration: duration,
  markerSize: n,
  overlayTime: boolean,
  downsample: boolean,
  xScale: {
   label: 'string',
   tickFormat: 'd3FormatString'
  },
  yScales: {
   primary: {
    label: 'string',
    tickFormat: 'd3FormatString',
    minValue: n,
    maxValue: n,
    displayOnAxis: 'left'
   },
   secondary: {
    label: 'string',
    tickFormat: 'd3FormatString',
    minValue: n,
    maxValue: n,
    displayOnAxis: 'right'
   }
  },
  keyField: 'fieldname',
  valueField: 'fieldname',
  timeField: 'fieldname',
  interval: 'n',
  series: [
   {
    name: 'seriesname',
    label: 'string',
    yScale: 'primary|secondary',
    color: 'color',
    geom: 'line|bars',
    width: n
   }
  ]
}   

or

view timechart -id 'string' -title 'string' -duration duration -downsample boolean -markerSize n -overlayTime boolean
   -xScale.label 'string' -xScale.tickFormat 'd3FormatString'
  -yScales.primary.label 'string' -yScales.primary.tickFormat 'd3FormatString' -yScales.primary.minValue 'n' -yScales.primary.maxValue 'n' -yScales.primary.displayOnAxis 'left'
   -yScales.secondary.label 'string' -yScales.secondary.tickFormat 'd3FormatString' -yScales.secondary.minValue 'n' -yScales.secondary.maxValue 'n' -yScales.secondary.displayOnAxis 'left'
   -keyField 'fieldname' -valueField 'fieldname' -timeField 'fieldname'
   -interval n -series [{name : 'seriesname', label : 'string', yScale : 'primary|secondary', color : 'color', geom : 'line|bars', width : n}]

See Defining sink parameters for an explanation of how sink parameters can be expressed as object literals.

Parameter Description Required?
-id An identifier for this sink that serves as a handle for referencing the object in Juttle syntax; conceptually identical to a variable name No
-title The title for the user-visible output, if it has one; the value may be any valid Juttle expression that produces a string No; defaults to the name field that is present in all metrics points
-duration

The span of time to display, either in seconds (>=10) or as a Juttle moment literal.

This feature can also be used for comparing data from multiple intervals, such as this week's Web traffic versus last week's. This is done by setting the -overlayTime flag to true.

No
-downsample Whether the timechart should downsample data by averaging. Downsampling is triggered when the point density exceeds 1 point per 2 pixels. No; defaults to true
-markerSize

he diameter of the circle representing each point, in pixels

When your data is not very dense, the chart renders distinctly separate circles connecting by a one-pixel line. For denser data, circles may be rendered close together, giving the appearance of a continuous line of the specified thickness.

No; defaults to 0 (circle not shown)
-overlayTime Whether the -duration value should be used to overlay time ranges. When true, the value of -duration drives the time-length of each overlayed range. No; defaults to false
-xScale.label The string that labels the X scale No; defaults to the value of the time field
-xScale.tickFormat Customize the unit display for this axis, using the d3 number formatting syntax No
-yScales.primary.label A string to label the Y axis No; default is the name of the -valueField
-yScales.primary.tickFormat Customize the unit display for the Y axis, using the d3 number formatting syntax No
-yScales.primary.minValue The value at the bottom of the Y scale No; the default is automatically derived from your data
-yScales.primary.maxValue The value at the top of the Y scale No; the default is automatically derived from your data
-yScales.primary.displayOnAxis Where to display the Y axis; must be exactly one of the following depending on whether your bar chart is oriented vertically or horizontally:
  • left
  • right
No; the default is left
-yScales.secondary.label The string that labels the secondary Y scale No; by default no label is displayed
-yScales.secondary.tickFormat Customize the unit display for this axis, using the d3 number formatting syntax No
-yScales.secondary.minValue The value at the bottom of the Y scale No; the default is automatically derived from your data
-yScales.secondary.maxValue The value at the top of the Y scale No; the default is automatically derived from your data
-yScales.secondary.displayOnAxis The axis on which to display this scale, either 'left' or 'right' No; defaults to 'left'
-keyField The field containing the name of the series to which each point belongs

Required when series is configured; otherwise Jut looks for unique streams and creates a series for each one

For simple metrics, the key field usually defaults to the name field that is present in all metrics points

-valueField The name of the field to use as the source for the numeric values No; defaults to the value field that is present in all metrics points. If no value field is present, the first numeric field in the stream is used.
-timeField The field containing the time stamp No; defaults to the time field
-interval The duration threshold between two consecutive points, above which they will not be connected by a line No; all points are connected by lines
-series Configure one or more data series individually, using one or more items in an array with these parameters: No
   -series [   
   {   
    name : 'seriesname',   
    label : 'string',   
    yScale : 'primary|secondary',   
    color : 'color',   
    geom : 'line|bars',
    width : n   
   },   
   {   
    name : 'someotherseries',   
   ...   
   }   
  ]   

Series Parameters

-series Parameter Description
name A series name that can be found in the specified -keyField; omit this option to configure all series in the data set
label An optional string to override the scale label for this series
yScale The Y scale to use for this series, either "primary" or "secondary"; the default is "primary"
color The color to use for this series, specified with any CSS3-supported hex or name value; if not specified, a color is selected from the built-in palette
geom Set this to 'bars' to display this series as bars on the time chart; the width of each bar is the interval between the current point and the previous point. The default is 'line'.
width Sets the width of the series. Currently only applies when geom is 'line' (by setting the stroke width).

Example: Timechart with default series selection

read stochastic -source 'cdn' -last :1 hour: -nhosts 3 -source_type 'metric' name='cpu'
| view timechart 
    -title '% CPU busy on all hosts' 
    -yScales.primary.tickFormat '%'

Example: Compare yesterday's CPU usage with usage today so far

read stochastic -source 'cdn' -source_type 'metric' -last :2 days: -daily .5 name = 'cpu'
| view timechart
    -duration :1 day:
    -overlayTime true

Example: Compare CPU usage from today with the same day last week

(
read stochastic -source 'cdn' -from :7 days ago: -to :6 days ago: -daily .5  -source_type 'metrics' name = 'cpu';
read stochastic -source 'cdn' -from :1 days ago: -to :now: -daily .5  -source_type 'metrics' name = 'cpu'
)
| view timechart
    -duration :1 day:
    -overlayTime true

Example: Configure a multi-series time chart

sub src(cate, coefficient) {
  emit -limit 100 -hz 10 |
  put category = cate       |
  put value = Math.random() * coefficient
}

(
src -cate "smaug"   -coefficient 10;
src -cate "sauron"  -coefficient 20;
src -cate "saruman" -coefficient 1;
) |
view timechart -o {
  keyField: 'category',
  yScales: {
    secondary: {}
  },
  series: [
  {
    label  : 'smaug',
    color  : 'red',
    name   : 'smaug'
  },
  {
    label  : 'sauron',
    color  : '#228B22',
    name   : 'sauron'
  },
  {
    label  : 'saruman',
    color  : 'burlywood',
    name   : 'saruman',
    yScale : 'secondary'
  }
  ]
}

Example: Configure one series to be displayed as bars, while others are displayed as lines

read stochastic -source 'srch_cluster' -from :2 minutes ago:           // Get data from 2 minutes ago and ingest live data
   name = 'response_ms'                                         // Filter our all metrics except response_ms
| reduce -every :2s: p90 = percentile('value', .9) by service   // Calculate p90 response time
| view timechart -valueField 'p90'                                  // Plot data on a chart
  -title 'Response time (ms) by Service'
  -series [{name : 'search', geom : 'bars'}]
  -duration :2 minutes: