UNPKG

virool-pivot

Version:

A web-based exploratory visualization UI for Druid.io

174 lines (137 loc) 6.18 kB
# This is am example configuration file for Pivot, here you can add data sources as well as configure Pivot settings # You can start by using this sample config by running `cp config_sample.yaml config.yaml` # The port on which the Pivot server will listen on port: 9090 # Run in verbose mode and print the queries sent to the server #verbose: true # A Druid broker node that can serve data (only used if you have Druid based data source) #druidHost: localhost:8082 # A timeout for the Druid queries in ms (default: 30000 = 30 seconds) timeout: 30000 #sourceListRefreshOnLoad: true #sourceListRefreshInterval: 0 #10000 auth: auth.js #headerBackground: '#ffc000' #hideGitHubIcon: true # The data sources that you have configured, these will appear, in order, inside the navigation menu of Pivot # In general there can be two types of 'engine': # - native: a JSON file that is crunched within plywood itself (useful for small datasets and testing) # - druid: a Druid dataSource dataSources: - name: static-imply-logs # This will go into the URL so no fancy characters allowed # This is the title that will grace this data source in the the menus title: Imply Logs # Use the native engine, all calculations will be done in Node.JS. Good for up to 100k rows of data. engine: native # The file representing the datasource relative to repo root source: ../../stats/bucketlogs/imply-all.json # This datasource was scraped using https://github.com/implydata/wikiticker # GitHub does not like large files so only a sampled file is checked in # There is also a non-sampled file with the filter: isAnonymous == true applied, to use it set: # source: assets/data/wikiticker-2015-09-12-anonymous.json # Run `assets/data-raw/process-wikiticker-2015-09-12` to get the full example file # The refresh rule describes how often the data source looks for new data. Default: 'query'/PT1M (every minute) # In this case it has to be fixed since this data source is static refreshRule: rule: query refresh: PT1H # The default timezone for this dataset to operate in defaults to UTC #defaultTimezone: Asia/Kathmandu # The default duration for the time filter (if not set P1D is used) defaultDuration: P1D # How the dataset should be introspected # possible options are: # * none - Do not do any introspection, take what is written in the config as the rule of law. # * no-autofill - Introspect the datasource but do not automatically generate dimensions or measures # * autofill-dimensions-only - Introspect the datasource, automatically generate dimensions only # * autofill-measures-only - Introspect the datasource, automatically generate measures only # * autofill-all - (default) Introspect the datasource, automatically generate dimensions and measures introspection: autofill-dimensions-only # The list of dimensions defined in the UI. The order here will be reflected in the UI dimensions: - name: time type: TIME - name: month expression: $time.timeBucket('P1M', 'Etc/UTC') - name: quarter expression: $time.timeBucket('P3M', 'Etc/UTC') - name: year expression: $time.timeBucket('P1Y', 'Etc/UTC') - name: statusCode # The list of measures defined in the UI. The order here will be reflected in the UI measures: # A general measure looks like so: # # name: avg_revenue # ^ the name of the dimension as used in the URL (you should try not to change these) # # title: Average Revenue # ^ (optional) the human readable title. If not set a title is generated from the 'name' # # expression: $main.sum($revenue) / $main.sum($volume) * 10 # ^ (optional) the Plywood bucketing expression for this dimension. # Usually defaults to '$main.sum($name)' but if the name contains 'min' or 'max' will use that as the aggregate instead of sum. # this is the place to define your fancy formulas - name: count title: Count expression: $main.count() - name: count200 title: Count200 expression: $main.filter($statusCode == 200).count() - name: uniqueIp title: Unique IP expression: $main.countDistinct($remoteIp) - name: countPerIp title: Count per IP expression: $main.count() / $main.countDistinct($remoteIp) - name: count200PerIp title: Count200 per IP expression: $main.filter($statusCode == 200).count() / $main.countDistinct($remoteIp) - name: uniqueUserAgent title: Unique User Agent expression: $main.countDistinct($userAgent) - name: avgObjectSize expression: $main.average($objectSize) - name: avgStatusCode expression: $main.average($statusCode) - name: maxStatusCode expression: $main.max($statusCode) linkViewConfig: title: Imply Clarity linkItems: - name: 'd1' title: 'Druid Logz' description: 'I like logs' group: 'Logz' dataSource: 'static-imply-logs' essence: pinnedDimensions: ['statusCode'] selectedMeasures: ['count', 'countPerIp', 'uniqueIp'] splits: 'time' - name: 'd2' title: 'Druid Logz part 2' description: 'I like logs also (statusCode)' group: 'Logz' dataSource: 'static-imply-logs' essence: pinnedDimensions: ['statusCode'] selectedMeasures: ['count', 'countPerIp', 'uniqueIp'] splits: ['statusCode'] - name: 'b1' title: 'Blog Logz' description: 'I like logs' group: 'Blogs' dataSource: 'static-imply-logs' essence: pinnedDimensions: ['statusCode'] selectedMeasures: ['count', 'countPerIp', 'uniqueIp'] splits: [] - name: 'b2' title: 'Blog Logz part 2' description: 'I like logs also (versionExtract)' group: 'Blogs' dataSource: 'static-imply-logs' essence: pinnedDimensions: ['versionExtract'] selectedMeasures: ['count', 'countPerIp', 'uniqueIp'] splits: []