master 20ae3a908c56 cached
85 files
553.3 KB
171.0k tokens
23 symbols
1 requests
Download .txt
Showing preview only (581K chars total). Download the full file or copy to clipboard to get everything.
Repository: slanatech/dashblocks-template
Branch: master
Commit: 20ae3a908c56
Files: 85
Total size: 553.3 KB

Directory structure:
gitextract_2_g3etwt/

├── .editorconfig
├── .eslintignore
├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       └── main.yml
├── .gitignore
├── .prettierrc
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── babel.config.js
├── cypress.json
├── package.json
├── public/
│   ├── googleee01dc033d7bbca2.html
│   └── index.html
├── scripts/
│   └── demodeploy.sh
├── src/
│   ├── App.vue
│   ├── components/
│   │   ├── menu/
│   │   │   ├── menudrawer.vue
│   │   │   ├── menulist.vue
│   │   │   ├── menulistitem.vue
│   │   │   └── menulistitemex.vue
│   │   ├── settings/
│   │   │   ├── colorschemeselector.vue
│   │   │   └── settings.vue
│   │   ├── tables/
│   │   │   ├── htable.vue
│   │   │   ├── itable.vue
│   │   │   └── ptable.vue
│   │   └── user/
│   │       ├── message.vue
│   │       ├── messages.vue
│   │       └── userinfo.vue
│   ├── dashboards/
│   │   ├── ChartJsShowcase.json
│   │   ├── dashfive.json
│   │   ├── dashfour.json
│   │   ├── dashsix.json
│   │   └── dashthree.json
│   ├── data/
│   │   ├── ChartJsShowcase.json
│   │   ├── api.json
│   │   ├── apioperation.json
│   │   ├── errors.json
│   │   ├── hitsdata.json
│   │   ├── iconsmdiv5.json
│   │   ├── itemstabledata.json
│   │   ├── ptabledata.json
│   │   ├── requests.json
│   │   └── summary.json
│   ├── layouts/
│   │   └── mainlayout.vue
│   ├── main.js
│   ├── mixins/
│   │   ├── demodashboard.js
│   │   └── vgtmethods.js
│   ├── pages/
│   │   └── login.vue
│   ├── quasar.js
│   ├── router.js
│   ├── store/
│   │   ├── modules/
│   │   │   └── layout.js
│   │   └── store.js
│   ├── styles/
│   │   ├── quasar.scss
│   │   ├── quasar.variables.scss
│   │   ├── textbgcolors.scss
│   │   ├── ubbox.scss
│   │   ├── ubcode.scss
│   │   └── vgt.scss
│   ├── utils.js
│   └── views/
│       ├── About.vue
│       ├── ChartJsShowcase.vue
│       ├── DashblocksShowcase.vue
│       ├── Dygraphs.vue
│       ├── Home.vue
│       ├── SampleDashboard.vue
│       ├── apiop.vue
│       ├── errors.vue
│       ├── forms.vue
│       ├── materialicons.vue
│       ├── mdi.vue
│       ├── observability.vue
│       ├── quasartable.vue
│       ├── requests.vue
│       ├── summary.vue
│       ├── tables.vue
│       ├── timeline.vue
│       ├── typography.vue
│       └── vuegoodtable.vue
├── tests/
│   ├── e2e/
│   │   ├── .eslintrc.js
│   │   ├── plugins/
│   │   │   └── index.js
│   │   ├── specs/
│   │   │   └── test.js
│   │   └── support/
│   │       ├── commands.js
│   │       └── index.js
│   └── unit/
│       └── .eslintrc.js
└── vue.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org

root = true


[*]

# Change these settings to your own preference
indent_style = space
indent_size = 2

# We recommend you to keep these unchanged
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false


================================================
FILE: .eslintignore
================================================
dist
node_modules
public
tests


================================================
FILE: .github/FUNDING.yml
================================================
github: sv2


================================================
FILE: .github/workflows/main.yml
================================================
name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  build_and_publish:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
    - uses: actions/checkout@v2

    - name: Get yarn cache directory path
      id: yarn-cache-dir-path
      run: echo "::set-output name=dir::$(yarn cache dir)"

    - uses: actions/cache@v1
      id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
      with:
        path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
        key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
        restore-keys: |
          ${{ runner.os }}-yarn-

    # Runs a set of commands using the runners shell
    - name: Install NPM packages
      run: yarn install

    - name: Build
      run: yarn run build

    - name: Deploy
      uses: JamesIves/github-pages-deploy-action@releases/v3
      with:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        BRANCH: gh-pages
        FOLDER: dist


================================================
FILE: .gitignore
================================================
.DS_Store
node_modules
/dist
/demo

/tests/e2e/videos/
/tests/e2e/screenshots/

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?


================================================
FILE: .prettierrc
================================================
{
  "singleQuote": true,
  "printWidth": 160
}


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing 

Want to contribute to **dashblocks-template**? Awesome!


There are many ways you can contribute:

* by reviewing 
* by reporting bugs
* by suggesting improvements and new features
* by writing or editing documentation
* by writing code ( no patch is too small  )
* by closing issues

## Proposing pull requests

Pull requests are very welcome. Note that if you are going to propose drastic changes, be sure to open an issue for discussion first, to make sure that your PR will be accepted before you spend effort coding it.


Inspired by https://github.com/middleman/middleman-heroku/blob/master/CONTRIBUTING.md


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2019-present slana.tech

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: README.md
================================================
<p align="center">
<img src="https://github.com/slanatech/dashblocks-template/blob/master/screenshots/dblogo.png?raw=true" height="200" width="200" alt="https://dashblocks.io"/>
</p>

# Dashblocks Vue Material Admin Template | [DEMO](https://slanatech.github.io/dashblocks-template)   

![](https://img.shields.io/badge/vue-2.x-brightgreen.svg)
<img src="https://img.shields.io/npm/v/quasar.svg?label=quasar">
<img src="https://img.shields.io/npm/v/dashblocks.svg?label=dashblocks"> 
![CI](https://github.com/slanatech/dashblocks-template/workflows/CI/badge.svg)

### Enable Analytics in your Vue App with [Dashblocks](https://github.com/slanatech/dashblocks)

[Live Demo](https://slanatech.github.io/dashblocks-template)


![dashboard](screenshots/dashblocks.png?raw=true)


Dashblocks Vue Material Admin Template is build based on [Quasar Framework](https://quasar.dev/), [Vuex](https://vuex.vuejs.org/installation.html),  [Vuejs](https://vuejs.org/) and [Dashblocks](https://github.com/slanatech/dashblocks).

We focus on providing beautiful interactive Dashboards out of the box, and helping to enable In-App Analytics in your Apps.  

[Dashblocks](https://github.com/slanatech/dashblocks) enables simple and streamlined way to quickly add awesome Dashboards in your app: 
 
* Use declarative approach to define a dashboard. The whole dashboard is just one JS object (or JSON) 
* Provide reasonable out of the box defaults for all chart types, such as colors
* Support dark / light modes out of the box    
* Enable interactivity by providing event handling on dashboard level
* Streamline dynamic updates of dashboard data, for example based on user interaction with dashboard
* Even dynamically generate Dashboard itself based on the data - thanks to declarative approach   
  

## Quick start

Clone `dashblocks-template` repo: 

```bash
$ git clone https://github.com/slanatech/dashblocks-template.git
```

Install dependencies:

```bash
$ cd dashblocks-template
$ yarn install
```

Run `serve`:

```bash
$ yarn run serve
```

`dashblocks-template` is set up using [vue-cli](https://github.com/vuejs/vue-cli), you will see standard `vue-cli` scripts in `package.json`: `serve`, `build` ...
[Quasar Framework](https://quasar.dev/) is configured using Vue CLI Quasar Plugin. 


## Enhancements and Bug Reports

If you find a bug, or have an enhancement in mind please post [issues](https://github.com/slanatech/dashblocks-template/issues)

test1 test2 test3

## License
 
[MIT](LICENSE)
   


================================================
FILE: babel.config.js
================================================
module.exports = {
  presets: ['@vue/cli-plugin-babel/preset'],
  plugins: [
    [
      'transform-imports',
      {
        quasar: {
          transform: 'quasar/dist/babel-transforms/imports.js',
          preventFullImport: true
        }
      }
    ]
  ]
};


================================================
FILE: cypress.json
================================================
{
  "pluginsFile": "tests/e2e/plugins/index.js"
}


================================================
FILE: package.json
================================================
{
  "name": "dashblocks-template",
  "version": "0.5.4",
  "private": true,
  "author": "https://github.com/sv2",
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "test:unit": "vue-cli-service test:unit",
    "test:e2e": "vue-cli-service test:e2e",
    "lint": "vue-cli-service lint",
    "release": "release-it",
    "release-ci": "release-it --ci"
  },
  "dependencies": {
    "@quasar/extras": "^1.8.2",
    "core-js": "^3.6.5",
    "quasar": "^1.12.3",
    "vue": "^2.6.11",
    "vue-router": "^3.3.2",
    "vuex": "^3.4.0"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "^4.3.1",
    "@vue/cli-plugin-e2e-cypress": "^4.3.1",
    "@vue/cli-plugin-eslint": "^4.3.1",
    "@vue/cli-plugin-unit-jest": "^4.3.1",
    "@vue/cli-service": "^4.3.1",
    "@vue/eslint-config-prettier": "^6.0.0",
    "@vue/test-utils": "^1.0.0-beta.33",
    "babel-core": "7.0.0-bridge.0",
    "babel-eslint": "^10.1.0",
    "babel-jest": "^24.9.0",
    "babel-plugin-transform-imports": "1.5.0",
    "dashblocks": "^0.5.35",
    "eslint": "^6.8.0",
    "eslint-plugin-prettier": "^3.1.3",
    "eslint-plugin-vue": "^6.2.2",
    "lint-staged": "^8.1.5",
    "node-sass": "^4.13.1",
    "release-it": "^13.5.4",
    "sass-loader": "^8.0.2",
    "vue-cli-plugin-quasar": "^2.0.0",
    "vue-template-compiler": "^2.6.11",
    "webpack-bundle-analyzer": "^3.6.0",
    "ramda": "^0.27.0",
    "vue-good-table": "^2.18.0"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "@vue/prettier"
    ],
    "rules": {},
    "parserOptions": {
      "parser": "babel-eslint"
    }
  },
  "postcss": {
    "plugins": {
      "autoprefixer": {}
    }
  },
  "browserslist": [
    "> 1%",
    "last 2 versions"
  ],
  "jest": {
    "moduleFileExtensions": [
      "js",
      "jsx",
      "json",
      "vue"
    ],
    "transform": {
      "^.+\\.vue$": "vue-jest",
      ".+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$": "jest-transform-stub",
      "^.+\\.jsx?$": "babel-jest"
    },
    "transformIgnorePatterns": [
      "/node_modules/"
    ],
    "moduleNameMapper": {
      "^@/(.*)$": "<rootDir>/src/$1"
    },
    "snapshotSerializers": [
      "jest-serializer-vue"
    ],
    "testMatch": [
      "**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"
    ],
    "testURL": "http://localhost/",
    "watchPlugins": [
      "jest-watch-typeahead/filename",
      "jest-watch-typeahead/testname"
    ]
  },
  "bugs": {
    "url": "https://github.com/slanatech/dashblocks-template/issues",
    "email": "sv2@slana.tech"
  },
  "gitHooks": {
    "pre-commit": "lint-staged"
  },
  "homepage": "https://github.com/slanatech/dashblocks-template",
  "license": "MIT",
  "lint-staged": {
    "*.{js,vue}": [
      "vue-cli-service lint",
      "git add"
    ]
  },
  "release-it": {
    "github": {
      "release": true
    },
    "hooks": {
      "after:release": "echo Successfully released ${name} v${version} to ${repo.repository}."
    }
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/slanatech/dashblocks-template"
  }
}


================================================
FILE: public/googleee01dc033d7bbca2.html
================================================
google-site-verification: googleee01dc033d7bbca2.html

================================================
FILE: public/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title>dashblocks-template</title>
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
    <link href='https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons' rel="stylesheet">
  </head>
  <body>
    <noscript>
      <strong>We're sorry but dashblocks-template doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>


================================================
FILE: scripts/demodeploy.sh
================================================
#!/bin/bash

# abort on errors
set -e

# navigate into the build output directory
cd demo

git init
git add -A
git commit -m 'deploy for github pages'

git push -f https://github.com/slanatech/dashblocks-template.git master:gh-pages

cd -


================================================
FILE: src/App.vue
================================================
<template>
  <div id="app">
    <router-view />
  </div>
</template>


================================================
FILE: src/components/menu/menudrawer.vue
================================================
<template>
  <q-drawer
    ref="drawer"
    show-if-above
    :mini="miniState"
    v-model="shown"
    :side="side"
    bordered
    @on-layout="handleLayout"
    :mini-to-overlay="miniToOverlay"
    @mouseover="handleMouseOver"
    @mouseout="handleMouseOut"
  >
    <div class="fit ub-box">
      <!-- "height: 100px;" seem to address issue with flex: 1 1 auto scroll area on safari -->
      <q-scroll-area class="ub-row ub-box-expand" style="height: 100px;">
        <slot name="menu"></slot>
      </q-scroll-area>
      <!-- Mini toggle is not needed if below breakpoint -->
      <div v-if="hasMiniToggle" class="ub-row ub-box-fixed">
        <q-btn color="down1" :ripple="false" class="full-width" flat :icon="miniState ? 'chevron_right' : 'chevron_left'" size="md" @click="toggleMini" />
      </div>
    </div>
  </q-drawer>
</template>
<script>
export default {
  name: 'MenuDrawer',
  components: {},
  props: {
    value: {
      type: Boolean,
      default: true
    },
    mini: {
      type: Boolean,
      default: true
    },
    autoExpand: {
      type: Boolean,
      default: false
    },
    side: {
      type: String,
      default: 'left'
    }
  },
  data: function() {
    return {
      miniState: this.mini,
      shown: this.value,
      drawerBelowBreakpoint: false
    };
  },
  computed: {
    miniToOverlay: function() {
      return this.autoExpand;
    },
    hasMiniToggle: function() {
      return !this.drawerBelowBreakpoint && !this.autoExpand;
    }
  },
  watch: {
    value: function(val) {
      this.shown = val;
    },
    shown: function(val) {
      this.$emit('input', val);
    },
    mini: function(val) {
      if (!this.autoExpand) {
        this.setMini(val);
      }
    },
    miniState: function(val) {
      this.$emit('update:mini', val);
    }
  },
  methods: {
    resize(delay) {
      this.$nextTick(() => {
        setTimeout(() => {
          window.dispatchEvent(new Event('resize'));
        }, delay);
      });
    },
    handleLayout(state) {
      console.log(`handleLayout: ${state}`);
      this.drawerBelowBreakpoint = this.$refs.drawer.belowBreakpoint;
      this.resize(100);
    },
    toggleMini() {
      this.miniState = !this.miniState;
      this.resize(200);
    },
    setMini(mini) {
      this.miniState = mini;
      this.resize(200);
    },
    handleMouseOver() {
      if (this.autoExpand) {
        this.miniState = false;
      }
    },
    handleMouseOut() {
      if (this.autoExpand) {
        this.miniState = true;
      }
    }
  }
};
</script>
<style lang="scss">
/*
  ::-webkit-scrollbar {
    width: 12px;
  }

  ::-webkit-scrollbar-track {
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
    border-radius: 10px;
  }

  ::-webkit-scrollbar-thumb {
    border-radius: 10px;
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
  }
 */
</style>


================================================
FILE: src/components/menu/menulist.vue
================================================
<template>
  <q-list class="db-menu-list">
    <div v-if="mode === 'expand'">
      <menu-list-item
        v-for="item in menuItems"
        v-bind:key="item.id"
        :item="item"
        :collapsed="collapsed"
        :active-class="activeClass"
        @expansionItemClick="onExpansionItemClick(item)"
        @itemExpanded="onItemExpanded(item)"
        @itemCollapsed="onItemCollapsed(item)"
      />
    </div>
    <div v-else>
      <menu-list-item-ex
        v-for="item in menuItems"
        v-bind:key="item.id"
        :item="item"
        :collapsed="collapsed"
        :active-class="activeClass"
        @expansionItemClick="onExpansionItemClick(item)"
        @itemExpanded="onItemExpanded(item)"
        @itemCollapsed="onItemCollapsed(item)"
      />
    </div>
  </q-list>
</template>
<script>
import MenuListItem from './menulistitem.vue';
import MenuListItemEx from './menulistitemex.vue';
export default {
  name: 'MenuList',
  components: { MenuListItem, MenuListItemEx },
  props: {
    menuItems: {
      type: Array,
      default: null
    },
    collapsed: {
      type: Boolean,
      default: false
    },
    activeClass: {
      type: String,
      default: ''
    },
    mode: {
      type: String,
      default: 'expand'
    }
  },
  data: function() {
    return {};
  },
  computed: {},
  watch: {},
  methods: {
    onExpansionItemClick(item) {
      this.$emit('expansionItemClick', item);
    },
    onItemExpanded(item) {
      this.$emit('itemExpanded', item);
    },
    onItemCollapsed(item) {
      this.$emit('itemCollapsed', item);
    }
  }
};
</script>
<style lang="scss">
.db-menu-list {
  a,
  a:hover {
    text-decoration: none;
  }
}
</style>


================================================
FILE: src/components/menu/menulistitem.vue
================================================
<template>
  <q-expansion-item
    v-if="item.items"
    :icon="item.icon"
    :label="item.title"
    :caption="item.caption"
    expand-separator
    :class="`menuitem-ei-${item.id} ` + itemClass"
    :active-class="itemActiveClass"
    @click="onClick"
    @show="onShow"
    @hide="onHide"
  >
    <q-tooltip anchor="top right" self="center middle" :target="`.menuitem-ei-${item.id} i`">{{ item.title }}</q-tooltip>
    <menu-list-item v-for="childItem in item.items" v-bind:key="childItem.id" :item="childItem" />
  </q-expansion-item>
  <q-item v-else clickable v-ripple v-bind:key="item.link" :to="item.link" exact :class="itemClass" :active-class="itemActiveClass">
    <q-item-section avatar>
      <!-- Workaround for badge, if desired to show when menu is collapsed
      <div class="relative-position" style="width:25px;margin-left:2px">
        <q-icon :name="item.icon" size="24px">
        </q-icon>
        <q-badge v-if="item.badge && !collapsed" :label="item.badge" floating/>
      </div>-->
      <q-icon v-if="item.icon" :name="item.icon"></q-icon>
      <q-tooltip anchor="top right" self="center middle">
        {{ item.title }}
      </q-tooltip>
    </q-item-section>
    <q-item-section>
      <q-item-label>{{ item.title }}</q-item-label>
      <q-item-label v-if="item.caption" caption>{{ item.caption }}</q-item-label>
    </q-item-section>

    <q-item-section v-if="hasSide" side :top="isSideTop">
      <q-badge v-if="item.badge" :color="item.badgeColor || 'primary'" :label="item.badge" />
      <q-item-label v-if="item.sideCaption" caption>{{ item.sideCaption }}</q-item-label>
    </q-item-section>
  </q-item>
</template>
<script>
import { mapActions, mapState } from 'vuex';
export default {
  name: 'MenuListItem',
  props: {
    item: {
      type: Object,
      default: null
    },
    collapsed: {
      type: Boolean,
      default: true
    },
    activeClass: {
      type: String,
      default: ''
    }
  },
  data: function() {
    return {};
  },
  computed: {
    itemClass: function() {
      return this.item.class ? this.item.class : '';
    },
    itemActiveClass: function() {
      return this.item.activeClass ? this.item.activeClass : this.activeClass;
    },
    hasSide: function() {
      return 'badge' in this.item || 'sideCaption' in this.item;
    },
    isSideTop: function() {
      return 'caption' in this.item || 'sideCaption' in this.item;
    }
  },
  watch: {},
  methods: {
    onClick(evt) {
      this.$emit('expansionItemClick', evt);
    },
    onShow(evt) {
      this.$emit('itemExpanded', evt);
    },
    onHide(evt) {
      this.$emit('itemCollapsed', evt);
    }
  }
};
</script>


================================================
FILE: src/components/menu/menulistitemex.vue
================================================
<template>
  <div v-if="item.items">
    <q-item clickable v-ripple exact :class="itemClass" :active-class="itemActiveClass">
      <q-item-section avatar>
        <q-icon v-if="item.icon" :name="item.icon"></q-icon>
        <q-tooltip anchor="top right" self="center middle">
          {{ item.title }}
        </q-tooltip>
      </q-item-section>
      <q-item-section @click="expanded = !expanded">
        <q-item-label>{{ item.title }}</q-item-label>
        <q-item-label v-if="item.caption" caption>{{ item.caption }}</q-item-label>
      </q-item-section>
      <q-item-section side :top="true">
        <q-btn size="sm" round unelevated :icon="expanded ? 'mdi-chevron-up' : 'mdi-chevron-down'" @click="expanded = !expanded" />
      </q-item-section>
    </q-item>
    <div v-if="expanded">
      <menu-list-item-ex v-for="childItem in item.items" v-bind:key="childItem.id" :item="childItem" :icon-size="'xs'" />
    </div>
  </div>
  <div v-else>
    <q-item clickable v-ripple v-bind:key="item.link" :to="item.link" exact :class="itemClass" :active-class="itemActiveClass">
      <q-item-section avatar>
        <!-- Workaround for badge, if desired to show when menu is collapsed
        <div class="relative-position" style="width:25px;margin-left:2px">
          <q-icon :name="item.icon" size="24px">
          </q-icon>
          <q-badge v-if="item.badge && !collapsed" :label="item.badge" floating/>
        </div>-->
        <q-icon v-if="item.icon" :name="item.icon"></q-icon>
        <q-tooltip anchor="top right" self="center middle">
          {{ item.title }}
        </q-tooltip>
      </q-item-section>
      <q-item-section style="margin-left: 10px;">
        <q-item-label>{{ item.title }}</q-item-label>
        <q-item-label v-if="item.caption" caption>{{ item.caption }}</q-item-label>
      </q-item-section>

      <q-item-section v-if="hasSide" side :top="isSideTop">
        <q-badge v-if="item.badge" :color="item.badgeColor || 'primary'" :label="item.badge" />
        <q-item-label v-if="item.sideCaption" caption>{{ item.sideCaption }}</q-item-label>
      </q-item-section>
    </q-item>
  </div>
</template>
<script>
import { mapActions, mapState } from 'vuex';
export default {
  name: 'MenuListItemEx',
  props: {
    item: {
      type: Object,
      default: null
    },
    collapsed: {
      type: Boolean,
      default: true
    },
    activeClass: {
      type: String,
      default: ''
    },
    insetLevel: {
      type: Number,
      default: 0
    },
    iconSize: {
      type: String,
      default: 'sm'
    }
  },
  data: function() {
    return {
      expanded: false
    };
  },
  computed: {
    itemClass: function() {
      return this.item.class ? this.item.class : '';
    },
    itemActiveClass: function() {
      return this.item.activeClass ? this.item.activeClass : this.activeClass;
    },
    hasSide: function() {
      return 'badge' in this.item || 'sideCaption' in this.item;
    },
    isSideTop: function() {
      return 'caption' in this.item || 'sideCaption' in this.item;
    }
  },
  watch: {},
  methods: {
    onClick(evt) {
      this.$emit('expansionItemClick', evt);
    },
    onShow(evt) {
      this.$emit('itemExpanded', evt);
    },
    onHide(evt) {
      this.$emit('itemCollapsed', evt);
    }
  }
};
</script>


================================================
FILE: src/components/settings/colorschemeselector.vue
================================================
<template>
  <q-card style="width: 100%;">
    <q-card-section>
      <q-input v-model="query" debounce="400" filled dense placeholder="Search Color Scheme" clearable>
        <template v-slot:prepend>
          <q-icon name="search" />
        </template>
      </q-input>
    </q-card-section>

    <q-card-section style="height: 300px;">
      <q-scroll-area class="fit">
        <q-list>
          <q-item
            v-for="scheme in filteredSchemes"
            v-bind:key="scheme.name"
            clickable
            v-ripple
            v-close-popup
            active-class="bg-teal-1 text-grey-8"
            @click="onSelect(scheme.name)"
          >
            <q-item-section avatar top>
              <q-icon name="mdi-invert-colors" />
            </q-item-section>
            <q-item-section>
              <q-item-label>{{ scheme.name }}</q-item-label>
              <div>
                <q-chip square size="sm">Light:</q-chip>
                <q-chip square size="xs" :style="`background-color: ${scheme.light[0]}`"></q-chip>
                <q-chip square size="xs" :style="`background-color: ${scheme.light[1]}`"></q-chip>
                <q-chip square size="xs" :style="`background-color: ${scheme.light[2]}`"></q-chip>
                <q-chip square size="xs" :style="`background-color: ${scheme.light[3]}`"></q-chip>
                <q-chip square size="xs" :style="`background-color: ${scheme.light[4]}`"></q-chip>
              </div>
              <div>
                <q-chip square size="sm">Dark :</q-chip>
                <q-chip square size="xs" :style="`background-color: ${scheme.dark[0]}`"></q-chip>
                <q-chip square size="xs" :style="`background-color: ${scheme.dark[1]}`"></q-chip>
                <q-chip square size="xs" :style="`background-color: ${scheme.dark[2]}`"></q-chip>
                <q-chip square size="xs" :style="`background-color: ${scheme.dark[3]}`"></q-chip>
                <q-chip square size="xs" :style="`background-color: ${scheme.dark[4]}`"></q-chip>
              </div>
              <!--<q-item-label caption lines="1">{{ getScopeDescription(scope) }}</q-item-label>-->
            </q-item-section>
          </q-item>
        </q-list>
      </q-scroll-area>
    </q-card-section>

    <q-card-actions align="right">
      <q-btn dense flat label="Cancel" color="primary" v-close-popup />
      <!--<q-btn dense label="OK" color="primary" @click="testClick" />-->
    </q-card-actions>
  </q-card>
</template>
<script>
import { mapActions } from 'vuex';
import { dbColors } from 'dashblocks';

export default {
  name: 'ColorSchemeSelector',
  components: {},
  props: {
    value: {
      type: String,
      default: null
    }
  },
  data() {
    return {
      query: '',
      schemes: []
    };
  },
  computed: {
    filteredSchemes: function() {
      return this.schemes.filter(s => this.isVisible(s.name));
    },
    dashboardColorScheme: {
      get() {
        return this.$store.state.layout.dashboardColorScheme;
      },
      set(value) {
        this.setDashboardColorScheme({ dashboardColorScheme: value });
      }
    }
  },
  watch: {
    query: function(value) {
      //this.updateCellQuery({ id: this.cell.id, query: value });
    }
  },
  mounted() {
    this.initialize();
  },
  methods: {
    ...mapActions({
      setDashboardColorScheme: 'layout/setDashboardColorScheme'
    }),
    initialize() {
      let dbc = dbColors;
      for (let schemeName of Object.keys(dbc.colorSchemes)) {
        let colorScheme = dbc.colorSchemes[schemeName];
        this.schemes.push({
          name: schemeName,
          light: colorScheme.light.slice(0, 5),
          dark: colorScheme.dark.slice(0, 5)
        });
        // TODO grab all
      }
    },
    isVisible(schemeName) {
      let qlc = this.query.toLowerCase();
      return schemeName.toLowerCase().indexOf(qlc) > -1;
    },
    onSelect(colorScheme) {
      this.$emit('input', colorScheme);
    }
  }
};
</script>


================================================
FILE: src/components/settings/settings.vue
================================================
<template>
  <div class="q-pa-md" style="max-width: 350px">
    <q-bar class="bg-none">
      Settings
      <q-space />
      <q-btn dense flat round icon="close" @click="onClose" />
    </q-bar>

    <q-list padding>
      <!--<q-item tag="label" v-ripple>
        <q-item-section side top>
          <q-checkbox v-model="check1" />
        </q-item-section>

        <q-item-section>
          <q-item-label>Notifications</q-item-label>
          <q-item-label caption>
            Notify me about updates to apps or games that I downloaded
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-item tag="label" v-ripple>
        <q-item-section side top>
          <q-checkbox v-model="check2" />
        </q-item-section>

        <q-item-section>
          <q-item-label>Sound</q-item-label>
          <q-item-label caption>
            Auto-update apps at anytime. Data charges may apply
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-item tag="label" v-ripple>
        <q-item-section side top>
          <q-checkbox v-model="check3" />
        </q-item-section>

        <q-item-section>
          <q-item-label>Auto-add widgets</q-item-label>
          <q-item-label caption>
            Automatically add home screen widgets
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-separator spaced />
      <q-item-label header>Notifications</q-item-label>
      -->

      <q-item tag="label" v-ripple>
        <q-item-section>
          <q-item-label>Dark Mode</q-item-label>
        </q-item-section>
        <q-item-section side>
          <q-toggle v-model="dark" icon="brightness_medium" />
        </q-item-section>
      </q-item>

      <q-item tag="label" v-ripple>
        <q-item-section>
          <q-item-label>Minimize Menu</q-item-label>
          <q-item-label caption>Minimize menu sidebar</q-item-label>
        </q-item-section>
        <q-item-section side top>
          <q-toggle v-model="menuMini" icon="menu" />
        </q-item-section>
      </q-item>

      <q-item tag="label" v-ripple>
        <q-item-section>
          <q-item-label>Auto-Expand Menu</q-item-label>
          <q-item-label caption>Auto-expand menu when hovering</q-item-label>
        </q-item-section>
        <q-item-section side top>
          <q-toggle v-model="menuAutoExpand" icon="menu" />
        </q-item-section>
      </q-item>

      <q-separator spaced />

      <!--<q-item tag="label">
        <q-item-section>
          <q-select v-model="dashboardColorScheme" :options="colorSchemaOptions" label="Dashboard Color Schema" />
        </q-item-section>
      </q-item>-->

      <q-item-label header style="padding-bottom: 0px;">Dashboard Color Scheme</q-item-label>

      <q-item>
        <q-item-section> </q-item-section>
        <q-item-section side top>
          <q-btn-dropdown
            size="md"
            align="right"
            v-model="schemeSelectorShown"
            outlined
            flat
            :label="dashboardColorScheme"
            icon="mdi-invert-colors"
            menu-self="center left"
          >
            <div style="width: 400px;">
              <color-scheme-selector v-model="dashboardColorScheme"></color-scheme-selector>
            </div>
          </q-btn-dropdown>
          <div>
            <q-chip square size="sm">Light:</q-chip>
            <q-chip square size="xs" :style="`background-color: ${lightColors[0]}`"></q-chip>
            <q-chip square size="xs" :style="`background-color: ${lightColors[1]}`"></q-chip>
            <q-chip square size="xs" :style="`background-color: ${lightColors[2]}`"></q-chip>
            <q-chip square size="xs" :style="`background-color: ${lightColors[3]}`"></q-chip>
            <q-chip square size="xs" :style="`background-color: ${lightColors[4]}`"></q-chip>
          </div>
          <div>
            <q-chip square size="sm">Dark:</q-chip>
            <q-chip square size="xs" :style="`background-color: ${darkColors[0]}`"></q-chip>
            <q-chip square size="xs" :style="`background-color: ${darkColors[1]}`"></q-chip>
            <q-chip square size="xs" :style="`background-color: ${darkColors[2]}`"></q-chip>
            <q-chip square size="xs" :style="`background-color: ${darkColors[3]}`"></q-chip>
            <q-chip square size="xs" :style="`background-color: ${darkColors[4]}`"></q-chip>
          </div>
        </q-item-section>
      </q-item>

      <q-separator spaced />
      <q-item-label header>TODO Banner Colors, Backgounds</q-item-label>

      <!--<q-separator spaced />
      <q-item-label header>Other settings</q-item-label>

      <q-item>
        <q-item-section side>
          <q-icon color="teal" name="volume_down" />
        </q-item-section>
        <q-item-section>
          <q-slider v-model="volume" :min="0" :max="10" label color="teal" />
        </q-item-section>
        <q-item-section side>
          <q-icon color="teal" name="volume_up" />
        </q-item-section>
      </q-item>

      <q-item>
        <q-item-section side>
          <q-icon color="deep-orange" name="brightness_medium" />
        </q-item-section>
        <q-item-section>
          <q-slider v-model="brightness" :min="0" :max="10" label color="deep-orange" />
        </q-item-section>
      </q-item>

      <q-item>
        <q-item-section side>
          <q-icon color="primary" name="mic" />
        </q-item-section>
        <q-item-section>
          <q-slider v-model="mic" :min="0" :max="50" label />
        </q-item-section>
      </q-item>-->
    </q-list>
  </div>
</template>
<script>
import { mapActions } from 'vuex';
import ColorSchemeSelector from './colorschemeselector.vue';
import { dbColors } from 'dashblocks';
export default {
  name: 'Settings',
  components: {
    ColorSchemeSelector
  },
  props: {},
  data() {
    return {
      schemeSelectorShown: false,
      colorSchemaOptions: ['default', 'Grafana', 'Tableau', 'Diverging', 'Categorical', 'Warm', 'Cool', 'Calm', 'Fancy', 'Colorblind Friendly'],

      lightColors: [],
      darkColors: [],

      check1: true,
      check2: false,
      check3: false,

      notif1: true,
      notif2: true,
      notif3: false,

      volume: 6,
      brightness: 3,
      mic: 8
    };
  },
  computed: {
    dark: {
      get() {
        return this.$store.state.layout.dark;
      },
      set(value) {
        this.setDark({ dark: value });
      }
    },
    menuAutoExpand: {
      get() {
        return this.$store.state.layout.menuAutoExpand;
      },
      set(value) {
        this.setMenuAutoExpand({ menuAutoExpand: value });
      }
    },
    menuMini: {
      get() {
        return this.$store.state.layout.menuMini;
      },
      set(value) {
        this.setMenuMini({ menuMini: value });
      }
    },
    dashboardColorScheme: {
      get() {
        return this.$store.state.layout.dashboardColorScheme;
      },
      set(value) {
        this.setDashboardColorScheme({ dashboardColorScheme: value });
      }
    }
  },
  watch: {
    dashboardColorScheme: function(val) {
      this.initColors();
    }
  },
  mounted() {
    this.initColors();
  },
  methods: {
    ...mapActions({
      setDark: 'layout/setDark',
      setMenuAutoExpand: 'layout/setMenuAutoExpand',
      setMenuMini: 'layout/setMenuMini',
      setDashboardColorScheme: 'layout/setDashboardColorScheme'
    }),
    initColors() {
      let colorScheme = dbColors.getColorScheme(this.dashboardColorScheme);
      this.lightColors = colorScheme.light.slice(0, 5);
      this.darkColors = colorScheme.dark.slice(0, 5);
    },
    onClose() {
      this.$emit('close');
    }
  }
};
</script>


================================================
FILE: src/components/tables/htable.vue
================================================
<template>
  <q-table
    dense
    flat
    :data="hits"
    :columns="columnsList"
    :pagination.sync="pagination"
    :rows-per-page-options="[5, 10, 25, 50, 100]"
    :filter="filter"
    :filter-method="compositeFilterFn"
    row-key="name"
    separator="cell"
    class="ub-hits-table"
  >
    <template v-slot:top="props">
      <q-input v-model="filter" debounce="500" filled dense placeholder="Search" clearable class="col-md-4">
        <template v-slot:prepend>
          <q-icon name="search" />
        </template>
      </q-input>
      <q-space></q-space>
      <q-toggle v-model="showPreview">Show Preview</q-toggle>
      <q-btn flat round dense :icon="props.inFullscreen ? 'fullscreen_exit' : 'fullscreen'" @click="props.toggleFullscreen" class="q-ml-md" size="md" />
    </template>

    <template v-slot:header="props">
      <q-tr :props="props">
        <q-th v-for="col in props.cols" :key="col.name" :props="props" class="ub-th">
          {{ col.label }}
        </q-th>
      </q-tr>
    </template>

    <template v-slot:body="props">
      <tr v-if="hasHitColumn" class="ub-hits-tr" @click="onRowClick(props.row)" @dblclick="onRowDblClick(props.row)">
        <td class="ub-hits-td-time">
          {{ formatTsColumn(props.row) }}
        </td>
        <td class="ub-hits-td-hit">
          <code class="ub-code" v-html="formatJsonColumn(props.row)"></code>
        </td>
      </tr>
      <tr v-else class="ub-hits-tr" @click="onRowClick(props.row)" @dblclick="onRowDblClick(props.row)">
        <td v-for="col in props.cols" :key="col.name">
          {{ formatColumn(col, props.row) }}
        </td>
      </tr>
    </template>
  </q-table>
</template>
<script>
import pathOr from 'ramda/src/pathOr';

// Specialized table to show collection of JSON documents
export default {
  name: 'HTable',
  props: {
    hits: {
      type: Array,
      default: () => []
    },
    tsPath: {
      type: Array,
      default: () => ['@timestamp']
    },
    tsLabel: {
      type: String,
      default: '@timestamp'
    },
    displayFields: {
      type: Object,
      default: () => {}
    },
    displayFieldsRemovePrefix: {
      type: String,
      default: null
    },
    page: {
      type: Number,
      default: 1
    },
    rowsPerPage: {
      type: Number,
      default: 5
    },
    sortBy: {
      type: String,
      default: ''
    },
    descending: {
      type: Boolean,
      default: true
    },
    preview: {
      type: Boolean,
      default: false
    }
  },
  data: function() {
    return {
      pagination: {
        page: 1,
        rowsPerPage: this.rowsPerPage,
        sortBy: this.tsLabel,
        descending: true
      },
      tsColumn: {
        name: this.tsLabel,
        required: true,
        label: this.tsLabel,
        align: 'left',
        field: this.tsLabel,
        format: this.formatTsColumn,
        sortable: true,
        style: 'vertical-align: top;'
      },
      hitColumn: {
        name: 'hit',
        required: true,
        label: 'Hit',
        align: 'left',
        sortable: false
      },
      columns: [],
      items: [],
      allColumnsList: [],
      thStops: [25, 50, 100],
      thStopsWidth: [100, 140, 160],
      showPreview: this.preview,
      filter: ''
    };
  },
  computed: {
    hasHitColumn: function() {
      return this.showPreview; //return Object.keys(this.displayFields).length <= 0;
    },
    columnsList: function() {
      let allColumnsList = [this.tsColumn];
      if (this.hasHitColumn) {
        allColumnsList.push(this.hitColumn);
      } else {
        for (let dc of Object.keys(this.displayFields)) {
          let fn = dc;
          if (this.displayFieldsRemovePrefix && fn.startsWith(this.displayFieldsRemovePrefix)) {
            fn = fn.replace(this.displayFieldsRemovePrefix, '');
          }
          allColumnsList.push({
            name: fn,
            required: true,
            label: fn,
            field: dc,
            align: 'left',
            sortable: true
          });
        }
      }
      return allColumnsList;
    }
  },
  mounted: function() {},
  watch: {
    page: function(val) {
      this.pagination.page = val;
    },
    rowsPerPage: function(val) {
      this.pagination.rowsPerPage = val;
    },
    sortBy: function(val) {
      this.pagination.sortBy = val;
    },
    descending: function(val) {
      this.pagination.descending = val;
    }
  },
  methods: {
    getThStyle(col) {
      let len = col.label.length;
      let idx = this.thStops.findIndex(x => x > len);
      return idx !== -1 ? `min-width:${this.thStopsWidth[idx]}px;` : 'min-width:250px;';
    },

    formatColumn(col, row) {
      if (col.label === this.tsLabel) {
        return this.formatTsColumn(row);
      }
      let path = pathOr(null, [col.field], this.displayFields);
      if (!path) {
        return '';
      }
      return pathOr('', path, row);
    },

    formatTsColumn(row) {
      return pathOr(null, this.tsPath, row);
    },

    formatJsonColumn(row) {
      let code = JSON.stringify(row, (key, value) => {
        if (typeof value === 'string') {
          return `<span class='ub-v-s'>${value}</span>`;
        } else if (typeof value === 'number') {
          return `<span class='ub-v-n'>${value}</span>`;
        }
        return value;
      });
      return code;
    },

    onRowClick(row) {
      this.$emit('rowClick', row);
    },

    compositeFilterFn(rows, terms, cols, cellValue) {
      console.log(`compositeFilterFn: terms = ${JSON.stringify(terms)}`);
      let filteredRows = rows;
      if (terms && terms !== '') {
        const lowerTerms = terms.toLowerCase();
        filteredRows = rows.filter(
          row =>
            JSON.stringify(row)
              .toLowerCase()
              .indexOf(lowerTerms) !== -1
        );
      }
      return filteredRows;
    },

    onRowDblClick(row) {
      this.$emit('rowDblClick', row);
    }
  }
};
</script>
<style lang="scss">
.ub-hits-table {
  width: 100%;

  .ub-hits-tr {
    font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;
    cursor: pointer;
  }

  .ub-hits-td-time {
    vertical-align: top;
  }

  .ub-hits-td-hit {
    vertical-align: top;
    white-space: normal;
    word-break: break-all;
  }
}
</style>


================================================
FILE: src/components/tables/itable.vue
================================================
<template>
  <q-table
    dense
    flat
    virtual-scroll
    :data="items"
    :columns="columns"
    :pagination.sync="pagination"
    class="ub-items-table"
    :row-key="valueProp"
    :selection="selection"
    :filter="filter"
    :selected.sync="selected"
    :visible-columns="visibleColumns"
    :hide-bottom="items.length > 0"
  >
    <template v-if="showSearch" v-slot:top>
      <q-input v-model="filter" debounce="500" filled dense placeholder="Search" clearable class="full-width">
        <template v-slot:prepend>
          <q-icon name="search" />
        </template>
      </q-input>
    </template>
    <template v-slot:header="props">
      <q-tr :props="props">
        <q-th v-if="hasSelectionToggle">
          <q-toggle size="xs" v-model="props.selected" />
        </q-th>
        <q-th key="icon" :props="props"> </q-th>
        <q-th key="value" :props="props">
          {{ valueTitle + ' ' + valueSubTitle }}
        </q-th>
        <q-th v-if="showData" key="data" :props="props">
          {{ dataTitle }}
        </q-th>
      </q-tr>
    </template>
    <template v-slot:body="props">
      <q-tr
        :props="props"
        class="ub-items-row"
        @click="props.selected = !props.selected"
        @mouseover.native="onRowMouseOver(props.row)"
        @mouseleave.native="onRowMouseLeave(props.row)"
      >
        <q-td auto-width v-if="hasSelectionToggle">
          <q-toggle size="xs" v-model="props.selected" :style="`color:${props.row.color};`" />
        </q-td>
        <q-td key="icon" :props="props" auto-width>
          <q-icon :name="icon" size="sm" :style="`color:${props.row.color};`" />
        </q-td>
        <q-td key="value" :props="props" class="ub-items-val">
          {{ valueProp ? props.row[valueProp] : '' }}
        </q-td>
        <q-td key="data" v-if="showData" :props="props" auto-width class="ub-items-data">
          {{ dataProp ? props.row[dataProp] : '' }}
        </q-td>
      </q-tr>
    </template>
  </q-table>
</template>
<script>
import { debounce } from 'quasar';

// Table that shows the list of items
// Note: when list of items is large, selection (toggle) may slow down (i.e. resizing)
// Consider implementing more efficient selection mechanism - i.e. click on row to select/ unselect
// For now this is fine
export default {
  name: 'ITable',
  props: {
    items: {
      type: Array,
      default: () => []
    },
    /* Property in item object that contains value to be shown */
    /* TODO Consider keyProp */
    valueProp: {
      type: String,
      default: null
    },
    valueTitle: {
      type: String,
      default: 'Value'
    },
    valueSubTitle: {
      type: String,
      default: ''
    },
    /* Property in item object that contains active flag */
    activeProp: {
      type: String,
      default: null
    },
    icon: {
      type: String,
      default: null
    },
    selection: {
      type: String,
      default: 'none'
    },
    selectionToggle: {
      type: Boolean,
      default: true
    },
    selectedItems: {
      type: Array,
      default: () => []
    },
    highlightedItem: {
      type: Object,
      default: null
    },
    dataProp: {
      type: String,
      default: null
    },
    dataTitle: {
      type: String,
      default: 'Data'
    },
    showData: {
      type: Boolean,
      default: false
    },
    showSearch: {
      type: Boolean,
      default: true
    }
  },
  data: function() {
    return {
      pagination: {
        sortBy: 'icons',
        descending: false,
        page: 1,
        rowsPerPage: 0
      },
      filter: '',
      columns: [
        {
          name: 'icon',
          required: false,
          label: '',
          align: 'left',
          field: 'title',
          sortable: false
        },
        { name: 'value', sortable: true, label: this.valueTitle, align: 'left', field: this.valueProp, style: 'white-space:normal; word-break:break-all;' },
        { name: 'data', sortable: true, label: this.dataTitle, align: 'left', field: 'data' }
      ],
      selected: [],
      highlighted: null
    };
  },
  computed: {
    visibleColumns: function() {
      return this.icon ? ['icon', 'value', 'data', 'ctrls'] : ['value', 'data', 'ctrls'];
    },
    hasSelectionToggle: function() {
      return (this.selection === 'single' || this.selection === 'multiple') && this.selectionToggle;
    }
  },
  created() {
    this.highlightedUpdateEvent = debounce(this.highlightedUpdateEvent, 500);
  },
  mounted: function() {},
  watch: {
    selected: function(val) {
      this.$emit('update:selectedItems', val);
    }
  },
  methods: {
    highlightedUpdateEvent() {
      this.$emit('update:highlightedItem', this.highlighted);
    },
    onRowMouseOver(row) {
      // TODO Consider using keyProp
      if (this.highlighted && this.highlighted[this.valueProp] === row[this.valueProp]) {
        return; // already there
      }
      this.highlighted = row;
      this.highlightedUpdateEvent();
    },
    onRowMouseLeave(row) {
      this.highlighted = null;
      this.highlightedUpdateEvent();
    }
  }
};
</script>
<style lang="scss">
.ub-items-table {
  & table {
    table-layout: auto;
  }

  /* [sv2] This disables highlighting background of selected rows in q-table. */
  .q-table > tbody > tr.selected > td:after {
    content: none;
  }

  & tbody > tr.selected > td.ub-items-val {
    font-weight: 500;
  }

  /* TODO Consider monospace
  font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", "Lucida Console", monospace;
  */
  .ub-items-val {
    &.active {
      color: #1a1aa6;
    }
  }

  .ub-items-data {
    font-weight: 500;
  }

  .ub-items-row:hover > .ub-items-row-ctrl > .ub-items-ctrls {
    display: block;
  }

  /* This enables passing arbitrary color to q-toggle */
  .q-toggle__inner--truthy {
    color: currentColor;
  }
  .q-toggle--dark .q-toggle__inner {
    color: currentColor;
  }
  /* This makes track color more prominent */
  .q-toggle__track {
    opacity: 0.8;
  }
  /* This makes thumb less prominent in dark mode */
  .q-toggle--dark .q-toggle__thumb:after {
    opacity: 0.7;
  }
}
</style>


================================================
FILE: src/components/tables/ptable.vue
================================================
<template>
  <q-table dense flat hide-bottom :data="items" :columns="columns" row-key="prop" :pagination.sync="pagination" class="ub-prop-table" style="width: 100%;">
    <template v-slot:body="props">
      <q-tr :props="props" class="ub-prop-row">
        <q-td key="prop" :props="props" auto-width class="ub-prop-key">
          {{ props.row.title }}
        </q-td>
        <q-td key="val" :props="props" :class="valClass(props.row)">
          {{ props.row.val }}
        </q-td>
      </q-tr>
    </template>
  </q-table>
</template>
<script>
// Show object properties in a table
export default {
  name: 'PTable',
  props: {
    obj: Object,
    removePrefix: {
      type: String,
      default: ''
    },
    // List of "active" properties, array of keys
    activeProps: {
      type: Array,
      default: () => []
    }
  },
  data: function() {
    return {
      keyCntr: 0,
      pagination: {
        sortBy: 'prop',
        descending: false,
        page: 1,
        rowsPerPage: 0
      },
      columns: [
        {
          name: 'prop',
          required: true,
          label: 'Name',
          align: 'left',
          field: 'title',
          sortable: true,
          style: 'vertical-align: top;white-space:normal;'
        },
        { name: 'val', label: 'Value', align: 'left', field: 'val', style: 'white-space:normal; word-break:break-all;font-weight:500;' }
      ],
      items: []
    };
  },
  computed: {},
  mounted: function() {
    this.preProcessObj(this.obj);
  },
  watch: {
    obj: function(val) {
      this.preProcessObj(val);
    },
    activeProps: function(val) {
      this.items.map(x => {
        x.active = val.includes(x.prop);
      });
    }
  },
  methods: {
    valClass: function(row) {
      return 'ub-prop-val ' + (row.active ? 'active' : '');
    },
    // Pre-process object, generate flat table data structure and values according to field types
    preProcessObj(obj) {
      this.items = [];
      let allitems = [];
      let path = [];
      this.preProcessProps('', path, obj, allitems);
      this.items = allitems;
    },
    addProp(prop, allItems) {
      prop.title = prop.prop;
      prop.active = this.activeProps.includes(prop.prop);
      if (this.removePrefix !== '' && prop.title.startsWith(this.removePrefix)) {
        prop.title = prop.title.replace(this.removePrefix, '');
      }
      allItems.push(prop);
    },
    preProcessProps(prefix, path, obj, allItems) {
      if (typeof obj === 'undefined' || !obj) {
        this.addProp(
          {
            typeclass: '',
            typetext: 't',
            type: 'string',
            prop: prefix,
            val: 'NULL',
            path: path
          },
          allItems
        );
        return;
      }
      for (let prop of Object.keys(obj)) {
        let propfullname = prefix !== '' ? `${prefix}.${prop}` : prop;
        let currentPath = path.slice();
        currentPath.push(prop);
        switch (typeof obj[prop]) {
          case 'object': {
            this.preProcessProps(propfullname, currentPath, obj[prop], allItems);
            break;
          }
          case 'string': {
            this.addProp(
              {
                key: this.keyCntr++,
                typeclass: '',
                typetext: 't',
                type: 'string',
                prop: propfullname,
                val: obj[prop],
                path: currentPath
              },
              allItems
            );
            break;
          }
          case 'boolean': {
            this.addProp(
              {
                key: this.keyCntr++,
                typeclass: 'fa fa-adjust',
                typetext: '',
                type: 'boolean',
                prop: propfullname,
                val: obj[prop] ? 'true' : 'false',
                path: currentPath
              },
              allItems
            );
            break;
          }
          case 'number': {
            this.addProp(
              {
                key: this.keyCntr++,
                typeclass: '',
                typetext: '#',
                type: 'number',
                prop: propfullname,
                val: `${obj[prop]}`,
                path: currentPath
              },
              allItems
            );
            break;
          }
        }
      }
    }
  }
};
</script>
<style lang="scss">
.ub-prop-table {
  & table {
    table-layout: auto;
  }
  /*
  font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", "Lucida Console", monospace;
  */
  .ub-prop-val {
    &.active {
      color: #1a1aa6;
    }
  }

  .ub-prop-row:hover > .ub-prop-val > .ub-prop-ctrls {
    display: block;
  }
}
</style>


================================================
FILE: src/components/user/message.vue
================================================
<template>
  <q-item>
    <q-item-section avatar top>
      <q-icon v-if="message.icon" :name="message.icon || 'mdi-message-text-outline'" size="34px" />
      <q-avatar v-else-if="message.avatar" size="34px">
        <img :src="message.avatar" />
      </q-avatar>
      <q-icon v-else name="mdi-message-text-outline" size="34px" />
    </q-item-section>

    <q-item-section top>
      <q-item-label lines="1">
        <div class="text-grey-7 cursor-pointer">{{ message.from }}</div>
        <div class="cursor-pointer text-weight-medium">{{ message.subject }}</div>
      </q-item-label>
      <q-item-label class="text-body2" lines="1">
        {{ message.text }}
      </q-item-label>
    </q-item-section>

    <q-item-section top side>
      <div class="text-grey-7 q-gutter-xs">
        <q-btn size="sm" flat dense round icon="delete" />
        <q-btn size="sm" flat dense round icon="done" />
        <!--<q-btn size="12px" flat dense round icon="more_vert" />-->
      </div>
      <div class="text-grey-7 q-gutter-xs">
        {{ message.date }}
      </div>
    </q-item-section>
  </q-item>
</template>
<script>
export default {
  name: 'Message',
  components: {},
  props: {
    message: {
      type: Object,
      default: null
    }
  },
  data: function() {
    return {};
  },
  computed: {},
  watch: {},
  methods: {}
};
</script>
<style lang="scss"></style>


================================================
FILE: src/components/user/messages.vue
================================================
<template>
  <div class="q-pa-md" style="max-width: 700px">
    <q-bar class="bg-none">
      Notifications
      <q-space />
      <q-btn dense flat round icon="close" @click="onClose" />
    </q-bar>

    <q-list style="width: 600px" separator>
      <message v-for="message in messagesList" v-bind:key="message.id" :message="message"></message>
    </q-list>
  </div>
</template>
<script>
import Message from './message.vue';
export default {
  name: 'Messages',
  components: { Message },
  props: {},
  data() {
    return {
      messagesList: [
        {
          id: '1',
          from: 'Slack',
          subject: 'Current Job result: SUCCESS',
          text: 'service-pipeline-branches/master:65e1b0d6-21f0-498d-9510-5a2acc49b06b',
          icon: 'mdi-slack',
          date: '4/23/20'
        },
        {
          id: '2',
          from: 'GitHub',
          subject: 'github-actions pushed to slanatech/dashblocks-template ',
          text: '62e7e60 Deploying to gh-pages from @e393152',
          icon: 'mdi-github',
          date: '4/23/20'
        },
        {
          id: '3',
          from: 'Leela Dunlap',
          subject: 'Dashblocks Material Admin Template',
          text: 'Dashblocks enables easily creating sophisticated interactive dashboards simply by declaring dashboard structure as json or javascript object',
          avatar: 'images/avatars/female/1.png',
          date: '4/23/20'
        },
        {
          id: '4',
          from: 'Keeley Milner',
          subject: 'Dashblocks Charts',
          text: 'Dashblocks uses popular charting libraries: d3, Chart.js, Dygraphs, Plotly.js.',
          avatar: 'images/avatars/male/1.png',
          date: '4/23/20'
        },
        { id: '5', from: 'Leela Dunlap', subject: 'Re: Dashblocks Charts', text: 'Awesome!', avatar: 'images/avatars/female/1.png', date: '4/23/20' }
      ]
    };
  },
  computed: {},
  watch: {},
  methods: {
    onClose() {
      this.$emit('close');
    }
  }
};
</script>


================================================
FILE: src/components/user/userinfo.vue
================================================
<template>
  <div class="q-pa-md" style="max-width: 280px">
    <q-list style="width: 260px">
      <q-item>
        <q-item-section avatar>
          <q-avatar>
            <img src="images/avatars/male/1.png" />
          </q-avatar>
        </q-item-section>
        <q-item-section>
          <q-item-label lines="1">
            <div class="text-h5">John Smith</div>
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-separator spaced />

      <q-item clickable v-ripple v-close-popup>
        <q-item-section avatar>
          <q-icon name="mdi-account"></q-icon>
        </q-item-section>
        <q-item-section>
          <q-item-label lines="1">
            My Account
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-item clickable v-ripple v-close-popup>
        <q-item-section avatar>
          <q-icon name="mdi-bell"></q-icon>
        </q-item-section>
        <q-item-section>
          <q-item-label lines="1">
            Notifications
          </q-item-label>
        </q-item-section>
        <q-item-section side>
          <q-badge color="red" label="5" />
        </q-item-section>
      </q-item>

      <q-item clickable v-ripple v-close-popup>
        <q-item-section avatar>
          <q-icon name="mdi-calendar"></q-icon>
        </q-item-section>
        <q-item-section>
          <q-item-label lines="1">
            Calendar
          </q-item-label>
        </q-item-section>
        <q-item-section side>
          <q-badge color="red" label="1" />
        </q-item-section>
      </q-item>

      <q-separator spaced />

      <q-item clickable v-ripple v-close-popup>
        <q-item-section avatar>
          <q-icon name="mdi-help-box"></q-icon>
        </q-item-section>
        <q-item-section>
          <q-item-label lines="1">
            Help
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-item clickable v-ripple v-close-popup>
        <q-item-section avatar>
          <q-icon name="mdi-logout"></q-icon>
        </q-item-section>
        <q-item-section>
          <q-item-label lines="1">
            Log Out
          </q-item-label>
        </q-item-section>
      </q-item>
    </q-list>

    <!--<q-list bordered padding>
      <q-item-label header>User Controls</q-item-label>

      <q-item clickable v-ripple>
        <q-item-section>
          <q-item-label>Content filtering</q-item-label>
          <q-item-label caption>
            Set the content filtering level to restrict apps that can be downloaded
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-item clickable v-ripple>
        <q-item-section>
          <q-item-label>Password</q-item-label>
          <q-item-label caption>
            Require password for purchase or use password to restrict purchase
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-separator spaced />
      <q-item-label header>General</q-item-label>

      <q-item tag="label" v-ripple>
        <q-item-section side top>
          <q-checkbox v-model="check1" />
        </q-item-section>

        <q-item-section>
          <q-item-label>Notifications</q-item-label>
          <q-item-label caption>
            Notify me about updates to apps or games that I downloaded
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-item tag="label" v-ripple>
        <q-item-section side top>
          <q-checkbox v-model="check2" />
        </q-item-section>

        <q-item-section>
          <q-item-label>Sound</q-item-label>
          <q-item-label caption>
            Auto-update apps at anytime. Data charges may apply
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-item tag="label" v-ripple>
        <q-item-section side top>
          <q-checkbox v-model="check3" />
        </q-item-section>

        <q-item-section>
          <q-item-label>Auto-add widgets</q-item-label>
          <q-item-label caption>
            Automatically add home screen widgets
          </q-item-label>
        </q-item-section>
      </q-item>

      <q-separator spaced />
      <q-item-label header>Notifications</q-item-label>

      <q-item tag="label" v-ripple>
        <q-item-section>
          <q-item-label>Battery too low</q-item-label>
        </q-item-section>
        <q-item-section side>
          <q-toggle color="blue" v-model="notif1" val="battery" />
        </q-item-section>
      </q-item>

      <q-item tag="label" v-ripple>
        <q-item-section>
          <q-item-label>Friend request</q-item-label>
          <q-item-label caption>Allow notification</q-item-label>
        </q-item-section>
        <q-item-section side top>
          <q-toggle color="green" v-model="notif2" val="friend" />
        </q-item-section>
      </q-item>

      <q-item tag="label" v-ripple>
        <q-item-section>
          <q-item-label>Picture uploaded</q-item-label>
          <q-item-label caption>Allow notification when uploading images</q-item-label>
        </q-item-section>
        <q-item-section side top>
          <q-toggle color="red" v-model="notif3" val="picture" />
        </q-item-section>
      </q-item>

      <q-separator spaced />
      <q-item-label header>Other settings</q-item-label>

      <q-item>
        <q-item-section side>
          <q-icon color="teal" name="volume_down" />
        </q-item-section>
        <q-item-section>
          <q-slider v-model="volume" :min="0" :max="10" label color="teal" />
        </q-item-section>
        <q-item-section side>
          <q-icon color="teal" name="volume_up" />
        </q-item-section>
      </q-item>

      <q-item>
        <q-item-section side>
          <q-icon color="deep-orange" name="brightness_medium" />
        </q-item-section>
        <q-item-section>
          <q-slider v-model="brightness" :min="0" :max="10" label color="deep-orange" />
        </q-item-section>
      </q-item>

      <q-item>
        <q-item-section side>
          <q-icon color="primary" name="mic" />
        </q-item-section>
        <q-item-section>
          <q-slider v-model="mic" :min="0" :max="50" label />
        </q-item-section>
      </q-item>
    </q-list>-->
  </div>
</template>
<script>
export default {
  name: 'UserInfo',
  components: {},
  props: {},
  data() {
    return {};
  },
  computed: {},
  watch: {},
  methods: {}
};
</script>


================================================
FILE: src/dashboards/ChartJsShowcase.json
================================================
{
  "layout": {
    "type": "grid"
  },
  "widgets": [
    {
      "id": "w1",
      "type": "DbChartjsLine",
      "cspan": 4,
      "height": 250,
      "properties": {
        "options": {
          "maintainAspectRatio": false,
          "legend": {
            "labels": {
              "fontColor": "red"
            }
          }
        }
      }
    },
    {
      "id": "w2",
      "type": "DbChartjsBar",
      "cspan": 4,
      "height": 250
    },
    {
      "id": "w3",
      "type": "DbChartjsHorizontalBar",
      "cspan": 4
    },
    {
      "id": "w4",
      "type": "DbChartjsPie",
      "cspan": 4
    },
    {
      "id": "w5",
      "type": "DbChartjsDoughnut",
      "cspan": 4,
      "height": 250
    },
    {
      "id": "w6",
      "type": "DbChartjsPolarArea",
      "cspan": 4,
      "height": 250
    },
    {
      "id": "w7",
      "type": "DbChartjsRadar",
      "cspan": 4,
      "height": 250
    },
    {
      "id": "w8",
      "type": "DbChartjsBar",
      "cspan": 4,
      "height": 250
    },
    {
      "id": "w9",
      "type": "DbChartjsBubble",
      "cspan": 8,
      "height": 300
    },
    {
      "id": "w10",
      "type": "DbChartjsScatter",
      "cspan": 8,
      "height": 300,
      "properties": {
        "options": {
          "scales": {
            "xAxes": [{
              "type": "linear",
              "position": "bottom"
            }]
          }
        }
      }
    }
  ]
}


================================================
FILE: src/dashboards/dashfive.json
================================================
{
  "layout": {
    "type": "grid"
  },
  "widgets": [
    {
      "id": "wa",
      "type": "DbDygraphsBar",
      "cspan": 16,
      "height": 250,
      "properties": {
        "options": {
          "stackedGraph": true
        }
      }
    },
    {
      "id": "w0",
      "type": "DbTrendLine",
      "cspan": 4,
      "properties": {
        "smooth": false,
        "strokeWidth": 1
      }
    },
    {
      "id": "w0",
      "type": "DbTrendLine",
      "cspan": 4
    },
    {
      "id": "w1",
      "type": "DbTrendBar",
      "cspan": 4
    },
    {
      "id": "w2",
      "type": "DbTrendBar",
      "cspan": 4
    },
    {
      "id": "w4",
      "type": "DbNumber",
      "cspan": 4,
      "properties": {
        "title": "Test OK",
        "badge": "req/s",
        "icon" : "fa fa-signal",
        "ranges": [1000,2000]
      }
    },
    {
      "id": "w5",
      "type": "DbNumber",
      "cspan": 4,
      "properties": {
        "title": "Test Warning",
        "badge": "req/s",
        "icon" : "fa fa-clock",
        "ranges": [1000,2000]
      }
    },
    {
      "id": "w6",
      "type": "DbNumber",
      "cspan": 4,
      "properties": {
        "title": "Test Alarm",
        "badge": "req/s",
        "icon" : "fa fa-chart-bar",
        "ranges": [1000,2000]
      }
    },
    {
      "id": "w7",
      "type": "DbPlotly",
      "cspan": 16,
      "rspan": 2,
      "properties": {
        "layout": {
          "paper_bgcolor":"rgba(0,0,0,0)",
          "plot_bgcolor":"rgba(0,0,0,0)",
          "modebar": {
            "bgcolor": "rgba(0,0,0,0)",
            "color": "rgba(0,0,0,0.5)"
          },
          "title": "reactive charts",
          "xaxis": {
            "title": "xaxis title"
          },
          "yaxis": {
            "title": "yaxis title"
          },
          "margin": {
            "l": 60,
            "r": 40,
            "b": 40,
            "t": 40,
            "pad": 5
          }
        }
      }
    },
    {
      "id": "w8",
      "type": "DbPlotlyLine",
      "cspan": 10,
      "height": 300,
      "properties": {
        "layout": {
          "template": "plotly_dark",
          "paper_bgcolor":"rgba(0,0,0,0)",
          "plot_bgcolor":"rgba(0,0,0,0)",
          "modebar": {
            "bgcolor": "rgba(0,0,0,0)",
            "color": "rgba(0,0,0,0.5)"
          },
          "margin": {
            "l": 60,
            "r": 40,
            "b": 40,
            "t": 40,
            "pad": 5
          }
        }
      }
    },
    {
      "id": "w9",
      "type": "DbPlotlyPie",
      "cspan": 6,
      "height": 300,
      "properties": {
        "layout": {
          "legend": {
            "orientation": "h"
          },
          "paper_bgcolor":"rgba(0,0,0,0)",
          "plot_bgcolor":"rgba(0,0,0,0)",
          "modebar": {
            "bgcolor": "rgba(0,0,0,0)",
            "color": "rgba(0,0,0,0.5)"
          },
          "margin": {
            "l": 60,
            "r": 40,
            "b": 40,
            "t": 40,
            "pad": 5
          }
        }
      }
    }


  ]
}


================================================
FILE: src/dashboards/dashfour.json
================================================
{
  "layout": {
    "type": "grid"
  },
  "widgets": [
    {
      "id": "w0",
      "type": "DbTrendLine",
      "cspan": 16
    },
    {
      "id": "w1",
      "type": "WidgetOne",
      "cspan": 2,
      "rspan": 2
    },
    {
      "id": "w2",
      "type": "WidgetOne",
      "cspan": 2,
      "rspan": 1
    },
    {
      "id": "w3",
      "type": "DbChartjsLine",
      "cspan": 4,
      "height": 350
    },
    {
      "id": "w4",
      "type": "DbChartjsBar",
      "cspan": 4,
      "height": 350
    },
    {
      "id": "w5",
      "type": "DbChartjsBar",
      "cspan": 4
    },
    {
      "id": "w1",
      "type": "DbNumber",
      "cspan": 4,
      "height": 300
    },
    {
      "id": "w6",
      "type": "DbEasyPie",
      "cspan": 4,
      "properties": {
        "barColor": "red",
        "lineWidth": 10
      }
    },
    {
      "id": "w7",
      "type": "DbTrendLine",
      "cspan": 6
    }
  ]
}


================================================
FILE: src/dashboards/dashsix.json
================================================
{
  "layout": {
    "type": "grid"
  },
  "widgets": [
    {
      "id": "w1",
      "type": "DbDygraphsBar",
      "cspan": 16,
      "height": 250,
      "properties": {
        "options": {
          "stackedGraph": true
        }
      }
    },
    {
      "id": "w2",
      "type": "DbDygraphsLine",
      "cspan": 8,
      "height": 300,
      "properties": {
        "options": {
          "stackedGraph": false,
          "title": "Random value Chart",
          "ylabel": "Probability",
          "labels" : ["Date","AAA","BBB"],
          "legend": "always"
        }
      }
    },
    {
      "id": "w6",
      "type": "DbDygraphsLine",
      "cspan": 8,
      "height": 300,
      "properties": {
        "options": {
          "showRangeSelector": true,
          "stackedGraph": false,
          "title": "Random value Chart",
          "ylabel": "Probability",
          "labels" : ["Date","AAA","BBB"],
          "legend": "always"
        }
      }
    },
    {
      "id": "w3",
      "type": "DbDygraphsSparkLine",
      "cspan": 4,
      "properties": {
        "smoothing": 0.5
      }
    },
    {
      "id": "w4",
      "type": "DbDygraphsSparkLine",
      "cspan": 4,
      "properties": {
        "options": {
          "colors": ["gray"],
          "strokeWidth": 0,
          "fillGraph": true,
          "fillAlpha": 0.2
        }
      }
    },
    {
      "id": "w5",
      "type": "DbDygraphsSparkLine",
      "cspan": 4,
      "properties": {
        "smoothing": 0.5
      }
    }
  ]
}


================================================
FILE: src/dashboards/dashthree.json
================================================
{
  "layout": {
    "type": "grid"
  },
  "widgets": [
    {
      "id": "w1",
      "type": "DbHorizon",
      "cspan": 16
    }
  ]
}


================================================
FILE: src/data/ChartJsShowcase.json
================================================
{
  "layout": {
    "type": "grid"
  },
  "widgets": [
    {
      "id": "w1",
      "type": "DbChartjsLine",
      "cspan": 4,
      "height": 250,
      "properties": {
        "options": {
          "maintainAspectRatio": false,
          "legend": {
            "labels": {
              "fontColor": "red"
            }
          }
        }
      }
    },
    {
      "id": "w2",
      "type": "DbChartjsBar",
      "cspan": 4,
      "height": 250
    },
    {
      "id": "w3",
      "type": "DbChartjsHorizontalBar",
      "cspan": 4
    },
    {
      "id": "w4",
      "type": "DbChartjsPie",
      "cspan": 4
    },
    {
      "id": "w5",
      "type": "DbChartjsDoughnut",
      "cspan": 4,
      "height": 250
    },
    {
      "id": "w6",
      "type": "DbChartjsPolarArea",
      "cspan": 4,
      "height": 250
    },
    {
      "id": "w7",
      "type": "DbChartjsRadar",
      "cspan": 4,
      "height": 250
    },
    {
      "id": "w8",
      "type": "DbChartjsBar",
      "cspan": 4,
      "height": 250
    },
    {
      "id": "w9",
      "type": "DbChartjsBubble",
      "cspan": 8,
      "height": 300
    },
    {
      "id": "w10",
      "type": "DbChartjsScatter",
      "cspan": 8,
      "height": 300,
      "properties": {
        "options": {
          "scales": {
            "xAxes": [{
              "type": "linear",
              "position": "bottom"
            }]
          }
        }
      }
    }
  ]
}


================================================
FILE: src/data/api.json
================================================
{
  "startts": 1588045302159,
  "all": {
    "requests": 2465,
    "responses": 2465,
    "errors": 286,
    "info": 0,
    "success": 2179,
    "redirect": 0,
    "client_error": 210,
    "server_error": 76,
    "total_time": 125717,
    "max_time": 111,
    "avg_time": 51.00081135902637,
    "total_req_clength": 119548,
    "max_req_clength": 210,
    "avg_req_clength": 48,
    "total_res_clength": 261003,
    "max_res_clength": 203,
    "avg_res_clength": 105,
    "req_rate": 12.00325280846899,
    "err_rate": 1.3829305466958186,
    "apdex_threshold": 25,
    "apdex_satisfied": 523,
    "apdex_tolerated": 1649,
    "apdex_score": 0.5466531440162272
  },
  "egress": {
    "requests": 0,
    "responses": 0,
    "errors": 0,
    "info": 0,
    "success": 0,
    "redirect": 0,
    "client_error": 0,
    "server_error": 0,
    "total_time": 0,
    "max_time": 0,
    "avg_time": 0,
    "total_req_clength": 0,
    "max_req_clength": 0,
    "avg_req_clength": 0,
    "total_res_clength": 0,
    "max_res_clength": 0,
    "avg_res_clength": 0,
    "req_rate": 0,
    "err_rate": 0,
    "apdex_threshold": 25,
    "apdex_satisfied": 0,
    "apdex_tolerated": 0,
    "apdex_score": 0
  },
  "sys": {
    "rss": 49680384,
    "heapTotal": 34906112,
    "heapUsed": 17352432,
    "external": 1405319,
    "cpu": 6.0893728265431175,
    "lag": 0.123,
    "maxlag": 4.560799
  },
  "name": "swagger-stats-spectest",
  "version": "0.95.16",
  "hostname": "hostname",
  "ip": "127.0.0.1",
  "apdexThreshold": 25,
  "apidefs": {
    "/v2/pet": {
      "PUT": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "updatePet",
        "summary": "Update an existing pet",
        "tags": [
          "pet"
        ]
      },
      "POST": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "addPet",
        "summary": "Add a new pet to the store",
        "tags": [
          "pet"
        ]
      }
    },
    "/v2/pet/findByStatus": {
      "GET": {
        "swagger": true,
        "deprecated": false,
        "description": "Multiple status values can be provided with comma separated strings",
        "operationId": "findPetsByStatus",
        "summary": "Finds Pets by status",
        "tags": [
          "pet"
        ]
      }
    },
    "/v2/pet/findByTags": {
      "GET": {
        "swagger": true,
        "deprecated": true,
        "description": "Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.",
        "operationId": "findPetsByTags",
        "summary": "Finds Pets by tags",
        "tags": [
          "pet"
        ]
      }
    },
    "/v2/pet/{petId}": {
      "GET": {
        "swagger": true,
        "deprecated": false,
        "description": "Returns a single pet",
        "operationId": "getPetById",
        "summary": "Find pet by ID",
        "tags": [
          "pet"
        ]
      },
      "POST": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "updatePetWithForm",
        "summary": "Updates a pet in the store with form data",
        "tags": [
          "pet"
        ]
      },
      "DELETE": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "deletePet",
        "summary": "Deletes a pet",
        "tags": [
          "pet"
        ]
      }
    },
    "/v2/pet/{petId}/uploadImage": {
      "POST": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "uploadFile",
        "summary": "uploads an image",
        "tags": [
          "pet"
        ]
      }
    },
    "/v2/store/inventory": {
      "GET": {
        "swagger": true,
        "deprecated": false,
        "description": "Returns a map of status codes to quantities",
        "operationId": "getInventory",
        "summary": "Returns pet inventories by status",
        "tags": [
          "store"
        ]
      }
    },
    "/v2/store/order": {
      "POST": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "placeOrder",
        "summary": "Place an order for a pet",
        "tags": [
          "store"
        ]
      }
    },
    "/v2/store/order/{orderId}": {
      "GET": {
        "swagger": true,
        "deprecated": false,
        "description": "For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions",
        "operationId": "getOrderById",
        "summary": "Find purchase order by ID",
        "tags": [
          "store"
        ]
      },
      "DELETE": {
        "swagger": true,
        "deprecated": false,
        "description": "For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors",
        "operationId": "deleteOrder",
        "summary": "Delete purchase order by ID",
        "tags": [
          "store"
        ]
      }
    },
    "/v2/user": {
      "POST": {
        "swagger": true,
        "deprecated": false,
        "description": "This can only be done by the logged in user.",
        "operationId": "createUser",
        "summary": "Create user",
        "tags": [
          "user"
        ]
      }
    },
    "/v2/user/createWithArray": {
      "POST": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "createUsersWithArrayInput",
        "summary": "Creates list of users with given input array",
        "tags": [
          "user"
        ]
      }
    },
    "/v2/user/createWithList": {
      "POST": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "createUsersWithListInput",
        "summary": "Creates list of users with given input array",
        "tags": [
          "user"
        ]
      }
    },
    "/v2/user/login": {
      "GET": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "loginUser",
        "summary": "Logs user into the system",
        "tags": [
          "user"
        ]
      }
    },
    "/v2/user/logout": {
      "GET": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "logoutUser",
        "summary": "Logs out current logged in user session",
        "tags": [
          "user"
        ]
      }
    },
    "/v2/user/{username}": {
      "GET": {
        "swagger": true,
        "deprecated": false,
        "description": "",
        "operationId": "getUserByName",
        "summary": "Get user by user name",
        "tags": [
          "user"
        ]
      },
      "PUT": {
        "swagger": true,
        "deprecated": false,
        "description": "This can only be done by the logged in user.",
        "operationId": "updateUser",
        "summary": "Updated user",
        "tags": [
          "user"
        ]
      },
      "DELETE": {
        "swagger": true,
        "deprecated": false,
        "description": "This can only be done by the logged in user.",
        "operationId": "deleteUser",
        "summary": "Delete user",
        "tags": [
          "user"
        ]
      }
    }
  },
  "apistats": {
    "/v2/pet": {
      "PUT": {
        "requests": 115,
        "responses": 115,
        "errors": 16,
        "info": 0,
        "success": 99,
        "redirect": 0,
        "client_error": 11,
        "server_error": 5,
        "total_time": 5807,
        "max_time": 98,
        "avg_time": 50.495652173913044,
        "total_req_clength": 13050,
        "max_req_clength": 210,
        "avg_req_clength": 113,
        "total_res_clength": 12180,
        "max_res_clength": 202,
        "avg_res_clength": 105,
        "req_rate": 0.5599894819366872,
        "err_rate": 0.07791158009553908,
        "apdex_threshold": 25,
        "apdex_satisfied": 24,
        "apdex_tolerated": 75,
        "apdex_score": 0.5347826086956522
      },
      "POST": {
        "requests": 116,
        "responses": 116,
        "errors": 13,
        "info": 0,
        "success": 103,
        "redirect": 0,
        "client_error": 11,
        "server_error": 2,
        "total_time": 6038,
        "max_time": 101,
        "avg_time": 52.05172413793103,
        "total_req_clength": 12510,
        "max_req_clength": 209,
        "avg_req_clength": 107,
        "total_res_clength": 11777,
        "max_res_clength": 203,
        "avg_res_clength": 101,
        "req_rate": 0.5648589556926583,
        "err_rate": 0.05843368507165431,
        "apdex_threshold": 25,
        "apdex_satisfied": 32,
        "apdex_tolerated": 71,
        "apdex_score": 0.5818965517241379
      }
    },
    "/v2/pet/findByStatus": {
      "GET": {
        "requests": 119,
        "responses": 119,
        "errors": 15,
        "info": 0,
        "success": 104,
        "redirect": 0,
        "client_error": 12,
        "server_error": 3,
        "total_time": 6716,
        "max_time": 100,
        "avg_time": 56.436974789915965,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 11860,
        "max_res_clength": 203,
        "avg_res_clength": 99,
        "req_rate": 0.5794673769605719,
        "err_rate": 0.07304210633956788,
        "apdex_threshold": 25,
        "apdex_satisfied": 18,
        "apdex_tolerated": 86,
        "apdex_score": 0.5126050420168067
      }
    },
    "/v2/pet/findByTags": {
      "GET": {
        "requests": 116,
        "responses": 116,
        "errors": 12,
        "info": 0,
        "success": 104,
        "redirect": 0,
        "client_error": 10,
        "server_error": 2,
        "total_time": 6412,
        "max_time": 101,
        "avg_time": 55.275862068965516,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 12530,
        "max_res_clength": 201,
        "avg_res_clength": 108,
        "req_rate": 0.5648589556926583,
        "err_rate": 0.05843368507165431,
        "apdex_threshold": 25,
        "apdex_satisfied": 20,
        "apdex_tolerated": 83,
        "apdex_score": 0.5301724137931034
      }
    },
    "/v2/pet/{petId}": {
      "GET": {
        "requests": 114,
        "responses": 114,
        "errors": 16,
        "info": 0,
        "success": 98,
        "redirect": 0,
        "client_error": 9,
        "server_error": 7,
        "total_time": 5997,
        "max_time": 101,
        "avg_time": 52.60526315789474,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 12009,
        "max_res_clength": 202,
        "avg_res_clength": 105,
        "req_rate": 0.5551200081807159,
        "err_rate": 0.07791158009553908,
        "apdex_threshold": 25,
        "apdex_satisfied": 26,
        "apdex_tolerated": 71,
        "apdex_score": 0.5394736842105263
      },
      "POST": {
        "requests": 113,
        "responses": 113,
        "errors": 11,
        "info": 0,
        "success": 102,
        "redirect": 0,
        "client_error": 6,
        "server_error": 5,
        "total_time": 5768,
        "max_time": 100,
        "avg_time": 51.04424778761062,
        "total_req_clength": 12302,
        "max_req_clength": 210,
        "avg_req_clength": 108,
        "total_res_clength": 12516,
        "max_res_clength": 203,
        "avg_res_clength": 110,
        "req_rate": 0.5502505344247447,
        "err_rate": 0.05356421131568312,
        "apdex_threshold": 25,
        "apdex_satisfied": 21,
        "apdex_tolerated": 81,
        "apdex_score": 0.5442477876106194
      },
      "DELETE": {
        "requests": 111,
        "responses": 111,
        "errors": 16,
        "info": 0,
        "success": 95,
        "redirect": 0,
        "client_error": 14,
        "server_error": 2,
        "total_time": 5477,
        "max_time": 101,
        "avg_time": 49.34234234234234,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 10790,
        "max_res_clength": 201,
        "avg_res_clength": 97,
        "req_rate": 0.5405115869128023,
        "err_rate": 0.07791158009553908,
        "apdex_threshold": 25,
        "apdex_satisfied": 21,
        "apdex_tolerated": 73,
        "apdex_score": 0.5180180180180181
      }
    },
    "/v2/pet/{petId}/uploadImage": {
      "POST": {
        "requests": 122,
        "responses": 122,
        "errors": 12,
        "info": 0,
        "success": 110,
        "redirect": 0,
        "client_error": 10,
        "server_error": 2,
        "total_time": 5714,
        "max_time": 99,
        "avg_time": 46.83606557377049,
        "total_req_clength": 14007,
        "max_req_clength": 210,
        "avg_req_clength": 114,
        "total_res_clength": 12753,
        "max_res_clength": 201,
        "avg_res_clength": 104,
        "req_rate": 0.5940757982284854,
        "err_rate": 0.05843368507165431,
        "apdex_threshold": 25,
        "apdex_satisfied": 31,
        "apdex_tolerated": 79,
        "apdex_score": 0.5778688524590164
      }
    },
    "/v2/store/inventory": {
      "GET": {
        "requests": 100,
        "responses": 100,
        "errors": 16,
        "info": 0,
        "success": 84,
        "redirect": 0,
        "client_error": 11,
        "server_error": 5,
        "total_time": 5166,
        "max_time": 100,
        "avg_time": 51.66,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 9600,
        "max_res_clength": 202,
        "avg_res_clength": 96,
        "req_rate": 0.48694737559711926,
        "err_rate": 0.07791158009553908,
        "apdex_threshold": 25,
        "apdex_satisfied": 23,
        "apdex_tolerated": 61,
        "apdex_score": 0.535
      }
    },
    "/v2/store/order": {
      "POST": {
        "requests": 107,
        "responses": 107,
        "errors": 15,
        "info": 0,
        "success": 92,
        "redirect": 0,
        "client_error": 7,
        "server_error": 8,
        "total_time": 5302,
        "max_time": 98,
        "avg_time": 49.55140186915888,
        "total_req_clength": 12968,
        "max_req_clength": 208,
        "avg_req_clength": 121,
        "total_res_clength": 10589,
        "max_res_clength": 201,
        "avg_res_clength": 98,
        "req_rate": 0.5210336918889176,
        "err_rate": 0.07304210633956788,
        "apdex_threshold": 25,
        "apdex_satisfied": 24,
        "apdex_tolerated": 68,
        "apdex_score": 0.5420560747663551
      }
    },
    "/v2/store/order/{orderId}": {
      "GET": {
        "requests": 110,
        "responses": 110,
        "errors": 9,
        "info": 0,
        "success": 101,
        "redirect": 0,
        "client_error": 8,
        "server_error": 1,
        "total_time": 5054,
        "max_time": 101,
        "avg_time": 45.945454545454545,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 11548,
        "max_res_clength": 203,
        "avg_res_clength": 104,
        "req_rate": 0.5356421131568312,
        "err_rate": 0.04382526380374073,
        "apdex_threshold": 25,
        "apdex_satisfied": 26,
        "apdex_tolerated": 74,
        "apdex_score": 0.5727272727272728
      },
      "DELETE": {
        "requests": 119,
        "responses": 119,
        "errors": 14,
        "info": 0,
        "success": 105,
        "redirect": 0,
        "client_error": 10,
        "server_error": 4,
        "total_time": 5792,
        "max_time": 99,
        "avg_time": 48.67226890756302,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 13335,
        "max_res_clength": 203,
        "avg_res_clength": 112,
        "req_rate": 0.5794673769605719,
        "err_rate": 0.0681726325835967,
        "apdex_threshold": 25,
        "apdex_satisfied": 30,
        "apdex_tolerated": 75,
        "apdex_score": 0.5672268907563025
      }
    },
    "/v2/user": {
      "POST": {
        "requests": 120,
        "responses": 120,
        "errors": 15,
        "info": 0,
        "success": 105,
        "redirect": 0,
        "client_error": 13,
        "server_error": 2,
        "total_time": 5876,
        "max_time": 101,
        "avg_time": 48.96666666666667,
        "total_req_clength": 13878,
        "max_req_clength": 210,
        "avg_req_clength": 115,
        "total_res_clength": 13716,
        "max_res_clength": 203,
        "avg_res_clength": 114,
        "req_rate": 0.5843368507165431,
        "err_rate": 0.07304210633956788,
        "apdex_threshold": 25,
        "apdex_satisfied": 24,
        "apdex_tolerated": 80,
        "apdex_score": 0.5333333333333333
      }
    },
    "/v2/user/createWithArray": {
      "POST": {
        "requests": 104,
        "responses": 104,
        "errors": 11,
        "info": 0,
        "success": 93,
        "redirect": 0,
        "client_error": 8,
        "server_error": 3,
        "total_time": 5149,
        "max_time": 100,
        "avg_time": 49.50961538461539,
        "total_req_clength": 11446,
        "max_req_clength": 208,
        "avg_req_clength": 110,
        "total_res_clength": 11957,
        "max_res_clength": 203,
        "avg_res_clength": 114,
        "req_rate": 0.5064252706210041,
        "err_rate": 0.05356421131568312,
        "apdex_threshold": 25,
        "apdex_satisfied": 29,
        "apdex_tolerated": 64,
        "apdex_score": 0.5865384615384616
      }
    },
    "/v2/user/createWithList": {
      "POST": {
        "requests": 114,
        "responses": 114,
        "errors": 14,
        "info": 0,
        "success": 100,
        "redirect": 0,
        "client_error": 11,
        "server_error": 3,
        "total_time": 5949,
        "max_time": 97,
        "avg_time": 52.18421052631579,
        "total_req_clength": 12257,
        "max_req_clength": 210,
        "avg_req_clength": 107,
        "total_res_clength": 12477,
        "max_res_clength": 202,
        "avg_res_clength": 109,
        "req_rate": 0.5551200081807159,
        "err_rate": 0.0681726325835967,
        "apdex_threshold": 25,
        "apdex_satisfied": 22,
        "apdex_tolerated": 78,
        "apdex_score": 0.5350877192982456
      }
    },
    "/v2/user/login": {
      "GET": {
        "requests": 111,
        "responses": 111,
        "errors": 12,
        "info": 0,
        "success": 99,
        "redirect": 0,
        "client_error": 8,
        "server_error": 4,
        "total_time": 5295,
        "max_time": 100,
        "avg_time": 47.7027027027027,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 12515,
        "max_res_clength": 203,
        "avg_res_clength": 112,
        "req_rate": 0.5405115869128023,
        "err_rate": 0.05843368507165431,
        "apdex_threshold": 25,
        "apdex_satisfied": 26,
        "apdex_tolerated": 73,
        "apdex_score": 0.5630630630630631
      }
    },
    "/v2/user/logout": {
      "GET": {
        "requests": 113,
        "responses": 113,
        "errors": 7,
        "info": 0,
        "success": 106,
        "redirect": 0,
        "client_error": 5,
        "server_error": 2,
        "total_time": 5795,
        "max_time": 102,
        "avg_time": 51.283185840707965,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 13021,
        "max_res_clength": 203,
        "avg_res_clength": 115,
        "req_rate": 0.5502505344247447,
        "err_rate": 0.03408631629179835,
        "apdex_threshold": 25,
        "apdex_satisfied": 23,
        "apdex_tolerated": 83,
        "apdex_score": 0.5707964601769911
      }
    },
    "/v2/user/{username}": {
      "GET": {
        "requests": 112,
        "responses": 112,
        "errors": 16,
        "info": 0,
        "success": 96,
        "redirect": 0,
        "client_error": 10,
        "server_error": 6,
        "total_time": 5814,
        "max_time": 99,
        "avg_time": 51.910714285714285,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 10691,
        "max_res_clength": 201,
        "avg_res_clength": 95,
        "req_rate": 0.5453810606687736,
        "err_rate": 0.07304210633956788,
        "apdex_threshold": 25,
        "apdex_satisfied": 20,
        "apdex_tolerated": 76,
        "apdex_score": 0.5178571428571429
      },
      "PUT": {
        "requests": 108,
        "responses": 108,
        "errors": 10,
        "info": 0,
        "success": 98,
        "redirect": 0,
        "client_error": 9,
        "server_error": 1,
        "total_time": 5792,
        "max_time": 99,
        "avg_time": 53.629629629629626,
        "total_req_clength": 11986,
        "max_req_clength": 207,
        "avg_req_clength": 110,
        "total_res_clength": 11715,
        "max_res_clength": 202,
        "avg_res_clength": 108,
        "req_rate": 0.5259031656448888,
        "err_rate": 0.048694737559711924,
        "apdex_threshold": 25,
        "apdex_satisfied": 21,
        "apdex_tolerated": 77,
        "apdex_score": 0.5509259259259259
      },
      "DELETE": {
        "requests": 114,
        "responses": 114,
        "errors": 13,
        "info": 0,
        "success": 101,
        "redirect": 0,
        "client_error": 8,
        "server_error": 5,
        "total_time": 6311,
        "max_time": 100,
        "avg_time": 55.35964912280702,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 12074,
        "max_res_clength": 202,
        "avg_res_clength": 105,
        "req_rate": 0.5551200081807159,
        "err_rate": 0.06330315882762551,
        "apdex_threshold": 25,
        "apdex_satisfied": 18,
        "apdex_tolerated": 83,
        "apdex_score": 0.5219298245614035
      }
    },
    "/pets": {
      "GET": {
        "requests": 49,
        "responses": 49,
        "errors": 6,
        "info": 0,
        "success": 43,
        "redirect": 0,
        "client_error": 5,
        "server_error": 1,
        "total_time": 2277,
        "max_time": 111,
        "avg_time": 46.46938775510204,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 4831,
        "max_res_clength": 195,
        "avg_res_clength": 98,
        "req_rate": 0.23860421404258844,
        "err_rate": 0.029216842535827153,
        "apdex_threshold": 25,
        "apdex_satisfied": 14,
        "apdex_tolerated": 28,
        "apdex_score": 0.5714285714285714
      },
      "POST": {
        "requests": 48,
        "responses": 48,
        "errors": 5,
        "info": 0,
        "success": 43,
        "redirect": 0,
        "client_error": 4,
        "server_error": 1,
        "total_time": 2424,
        "max_time": 99,
        "avg_time": 50.5,
        "total_req_clength": 5144,
        "max_req_clength": 204,
        "avg_req_clength": 107,
        "total_res_clength": 5319,
        "max_res_clength": 202,
        "avg_res_clength": 110,
        "req_rate": 0.23373474028661723,
        "err_rate": 0.024347368779855962,
        "apdex_threshold": 25,
        "apdex_satisfied": 8,
        "apdex_tolerated": 35,
        "apdex_score": 0.53125
      }
    },
    "/pets/abcde": {
      "DELETE": {
        "requests": 60,
        "responses": 60,
        "errors": 10,
        "info": 0,
        "success": 50,
        "redirect": 0,
        "client_error": 8,
        "server_error": 2,
        "total_time": 3100,
        "max_time": 101,
        "avg_time": 51.666666666666664,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 6082,
        "max_res_clength": 186,
        "avg_res_clength": 101,
        "req_rate": 0.29216842535827153,
        "err_rate": 0.048694737559711924,
        "apdex_threshold": 25,
        "apdex_satisfied": 11,
        "apdex_tolerated": 38,
        "apdex_score": 0.5
      },
      "GET": {
        "requests": 50,
        "responses": 50,
        "errors": 2,
        "info": 0,
        "success": 48,
        "redirect": 0,
        "client_error": 2,
        "server_error": 0,
        "total_time": 2692,
        "max_time": 99,
        "avg_time": 53.84,
        "total_req_clength": 0,
        "max_req_clength": 0,
        "avg_req_clength": 0,
        "total_res_clength": 5118,
        "max_res_clength": 203,
        "avg_res_clength": 102,
        "req_rate": 0.24347368779855963,
        "err_rate": 0.009738947511942386,
        "apdex_threshold": 25,
        "apdex_satisfied": 11,
        "apdex_tolerated": 37,
        "apdex_score": 0.59
      }
    }
  }
}


================================================
FILE: src/data/apioperation.json
================================================
{
  "startts": 1588045302159,
  "all": {
    "requests": 55827,
    "responses": 55827,
    "errors": 5998,
    "info": 0,
    "success": 49829,
    "redirect": 0,
    "client_error": 3994,
    "server_error": 2004,
    "total_time": 2844745,
    "max_time": 211,
    "avg_time": 50.956436849553086,
    "total_req_clength": 2760192,
    "max_req_clength": 210,
    "avg_req_clength": 49,
    "total_res_clength": 5786238,
    "max_res_clength": 203,
    "avg_res_clength": 103,
    "req_rate": 23.541789660116386,
    "err_rate": 2.5293075820190603,
    "apdex_threshold": 25,
    "apdex_satisfied": 12278,
    "apdex_tolerated": 37332,
    "apdex_score": 0.5542837695022121
  },
  "egress": {
    "requests": 0,
    "responses": 0,
    "errors": 0,
    "info": 0,
    "success": 0,
    "redirect": 0,
    "client_error": 0,
    "server_error": 0,
    "total_time": 0,
    "max_time": 0,
    "avg_time": 0,
    "total_req_clength": 0,
    "max_req_clength": 0,
    "avg_req_clength": 0,
    "total_res_clength": 0,
    "max_res_clength": 0,
    "avg_res_clength": 0,
    "req_rate": 0,
    "err_rate": 0,
    "apdex_threshold": 25,
    "apdex_satisfied": 0,
    "apdex_tolerated": 0,
    "apdex_score": 0
  },
  "sys": {
    "rss": 49631232,
    "heapTotal": 26808320,
    "heapUsed": 19504832,
    "external": 1397813,
    "cpu": 4.595193432265044,
    "lag": 0.092901,
    "maxlag": 4.560799
  },
  "name": "swagger-stats-spectest",
  "version": "0.95.16",
  "hostname": "hostname",
  "ip": "127.0.0.1",
  "apdexThreshold": 25,
  "apiop": {
    "/v2/pet/{petId}/uploadImage": {
      "POST": {
        "defs": {
          "swagger": true,
          "deprecated": false,
          "description": "",
          "operationId": "uploadFile",
          "summary": "uploads an image",
          "tags": [
            "pet"
          ]
        },
        "stats": {
          "requests": 2694,
          "responses": 2694,
          "errors": 283,
          "info": 0,
          "success": 2411,
          "redirect": 0,
          "client_error": 186,
          "server_error": 97,
          "total_time": 137397,
          "max_time": 126,
          "avg_time": 51.001113585746104,
          "total_req_clength": 294790,
          "max_req_clength": 210,
          "avg_req_clength": 109,
          "total_res_clength": 275845,
          "max_res_clength": 203,
          "avg_res_clength": 102,
          "req_rate": 1.136037783587754,
          "err_rate": 0.11933878721430378,
          "apdex_threshold": 25,
          "apdex_satisfied": 589,
          "apdex_tolerated": 1808,
          "apdex_score": 0.5541945063103192
        },
        "details": {
          "duration": {
            "count": 2694,
            "buckets": [
              10,
              25,
              50,
              100,
              200
            ],
            "values": [
              275,
              377,
              679,
              1349,
              14,
              0
            ]
          },
          "req_size": {
            "count": 2694,
            "buckets": [
              10,
              25,
              50,
              100,
              200
            ],
            "values": [
              0,
              218,
              336,
              648,
              1388,
              104
            ]
          },
          "res_size": {
            "count": 2694,
            "buckets": [
              10,
              25,
              50,
              100,
              200
            ],
            "values": [
              97,
              204,
              352,
              684,
              1318,
              39
            ]
          },
          "code": {
            "200": {
              "count": 2411
            },
            "401": {
              "count": 44
            },
            "404": {
              "count": 142
            },
            "500": {
              "count": 55
            },
            "501": {
              "count": 42
            }
          },
          "parameters": {
            "petId": {
              "name": "petId",
              "in": "path",
              "description": "ID of pet to update",
              "required": true,
              "type": "integer",
              "format": "int64",
              "hits": 2694,
              "misses": 0
            },
            "additionalMetadata": {
              "name": "additionalMetadata",
              "in": "formData",
              "description": "Additional data to pass to server",
              "required": false,
              "type": "string",
              "hits": 0,
              "misses": 0
            },
            "file": {
              "name": "file",
              "in": "formData",
              "description": "file to upload",
              "required": false,
              "type": "file",
              "hits": 0,
              "misses": 0
            }
          }
        }
      }
    }
  }
}


================================================
FILE: src/data/errors.json
================================================
{
  "startts": 1588092850475,
  "all": {
    "requests": 13204,
    "responses": 13204,
    "errors": 1402,
    "info": 0,
    "success": 11802,
    "redirect": 0,
    "client_error": 915,
    "server_error": 487,
    "total_time": 665490,
    "max_time": 102,
    "avg_time": 50.40063617085732,
    "total_req_clength": 638059,
    "max_req_clength": 210,
    "avg_req_clength": 48,
    "total_res_clength": 1363690,
    "max_res_clength": 203,
    "avg_res_clength": 103,
    "req_rate": 24.924164774325313,
    "err_rate": 2.64644645664981,
    "apdex_threshold": 25,
    "apdex_satisfied": 2944,
    "apdex_tolerated": 8854,
    "apdex_score": 0.5582399272947591
  },
  "egress": {
    "requests": 0,
    "responses": 0,
    "errors": 0,
    "info": 0,
    "success": 0,
    "redirect": 0,
    "client_error": 0,
    "server_error": 0,
    "total_time": 0,
    "max_time": 0,
    "avg_time": 0,
    "total_req_clength": 0,
    "max_req_clength": 0,
    "avg_req_clength": 0,
    "total_res_clength": 0,
    "max_res_clength": 0,
    "avg_res_clength": 0,
    "req_rate": 0,
    "err_rate": 0,
    "apdex_threshold": 25,
    "apdex_satisfied": 0,
    "apdex_tolerated": 0,
    "apdex_score": 0
  },
  "sys": {
    "rss": 61698048,
    "heapTotal": 24158208,
    "heapUsed": 19610016,
    "external": 1576443,
    "cpu": 2.132010624706579,
    "lag": 0.103182,
    "maxlag": 6.058928
  },
  "name": "swagger-stats-spectest",
  "version": "0.95.17",
  "hostname": "hostname",
  "ip": "127.0.0.1",
  "apdexThreshold": 25,
  "timeline": {
    "settings": {
      "bucket_duration": 1000,
      "bucket_current": 1588093380,
      "length": 60
    },
    "data": {
      "1588093321": {
        "stats": {
          "requests": 29,
          "responses": 29,
          "errors": 3,
          "info": 0,
          "success": 26,
          "redirect": 0,
          "client_error": 0,
          "server_error": 3,
          "total_time": 1663,
          "max_time": 97,
          "avg_time": 57.3448275862069,
          "total_req_clength": 1108,
          "max_req_clength": 190,
          "avg_req_clength": 38,
          "total_res_clength": 2544,
          "max_res_clength": 193,
          "avg_res_clength": 87,
          "req_rate": 29,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 22,
          "apdex_score": 0.5172413793103449
        },
        "sys": {
          "rss": 73629696,
          "heapTotal": 36741120,
          "heapUsed": 22383060,
          "external": 1927509,
          "cpu": 3.1899242839189688,
          "lag": 0.129841
        }
      },
      "1588093322": {
        "stats": {
          "requests": 22,
          "responses": 22,
          "errors": 3,
          "info": 0,
          "success": 19,
          "redirect": 0,
          "client_error": 3,
          "server_error": 0,
          "total_time": 1147,
          "max_time": 94,
          "avg_time": 52.13636363636363,
          "total_req_clength": 1269,
          "max_req_clength": 188,
          "avg_req_clength": 57,
          "total_res_clength": 2749,
          "max_res_clength": 195,
          "avg_res_clength": 124,
          "req_rate": 22,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 3,
          "apdex_tolerated": 16,
          "apdex_score": 0.5
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 19172033,
          "external": 1503999,
          "cpu": 2.8256244349538524,
          "lag": 0.04654
        }
      },
      "1588093323": {
        "stats": {
          "requests": 28,
          "responses": 28,
          "errors": 2,
          "info": 0,
          "success": 26,
          "redirect": 0,
          "client_error": 2,
          "server_error": 0,
          "total_time": 1445,
          "max_time": 98,
          "avg_time": 51.607142857142854,
          "total_req_clength": 1676,
          "max_req_clength": 200,
          "avg_req_clength": 59,
          "total_res_clength": 3045,
          "max_res_clength": 193,
          "avg_res_clength": 108,
          "req_rate": 28,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 22,
          "apdex_score": 0.5357142857142857
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 20588233,
          "external": 1639775,
          "cpu": 3.0452411938048027,
          "lag": 0.039472
        }
      },
      "1588093324": {
        "stats": {
          "requests": 19,
          "responses": 19,
          "errors": 2,
          "info": 0,
          "success": 17,
          "redirect": 0,
          "client_error": 2,
          "server_error": 0,
          "total_time": 980,
          "max_time": 97,
          "avg_time": 51.578947368421055,
          "total_req_clength": 767,
          "max_req_clength": 153,
          "avg_req_clength": 40,
          "total_res_clength": 1871,
          "max_res_clength": 176,
          "avg_res_clength": 98,
          "req_rate": 19,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 13,
          "apdex_score": 0.5526315789473685
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 21622555,
          "external": 1779088,
          "cpu": 2.2886910278853336,
          "lag": 0.058839
        }
      },
      "1588093325": {
        "stats": {
          "requests": 42,
          "responses": 42,
          "errors": 5,
          "info": 0,
          "success": 37,
          "redirect": 0,
          "client_error": 4,
          "server_error": 1,
          "total_time": 2178,
          "max_time": 98,
          "avg_time": 51.857142857142854,
          "total_req_clength": 1648,
          "max_req_clength": 197,
          "avg_req_clength": 39,
          "total_res_clength": 4712,
          "max_res_clength": 198,
          "avg_res_clength": 112,
          "req_rate": 42,
          "err_rate": 5,
          "apdex_threshold": 25,
          "apdex_satisfied": 7,
          "apdex_tolerated": 30,
          "apdex_score": 0.5238095238095238
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 22830306,
          "external": 1917044,
          "cpu": 3.268680452031966,
          "lag": 0.087054
        }
      },
      "1588093326": {
        "stats": {
          "requests": 20,
          "responses": 20,
          "errors": 2,
          "info": 0,
          "success": 18,
          "redirect": 0,
          "client_error": 2,
          "server_error": 0,
          "total_time": 903,
          "max_time": 93,
          "avg_time": 45.15,
          "total_req_clength": 1553,
          "max_req_clength": 203,
          "avg_req_clength": 77,
          "total_res_clength": 1917,
          "max_res_clength": 192,
          "avg_res_clength": 95,
          "req_rate": 20,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 14,
          "apdex_score": 0.55
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 24076802,
          "external": 2052014,
          "cpu": 1.626538698068855,
          "lag": 0.036661
        }
      },
      "1588093327": {
        "stats": {
          "requests": 23,
          "responses": 23,
          "errors": 2,
          "info": 0,
          "success": 21,
          "redirect": 0,
          "client_error": 0,
          "server_error": 2,
          "total_time": 1170,
          "max_time": 96,
          "avg_time": 50.869565217391305,
          "total_req_clength": 1286,
          "max_req_clength": 206,
          "avg_req_clength": 55,
          "total_res_clength": 2458,
          "max_res_clength": 201,
          "avg_res_clength": 106,
          "req_rate": 23,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 6,
          "apdex_tolerated": 15,
          "apdex_score": 0.5869565217391305
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 25065481,
          "external": 2187041,
          "cpu": 2.560722373167353,
          "lag": 0.036224
        }
      },
      "1588093328": {
        "stats": {
          "requests": 26,
          "responses": 26,
          "errors": 2,
          "info": 0,
          "success": 24,
          "redirect": 0,
          "client_error": 2,
          "server_error": 0,
          "total_time": 1495,
          "max_time": 98,
          "avg_time": 57.5,
          "total_req_clength": 720,
          "max_req_clength": 150,
          "avg_req_clength": 27,
          "total_res_clength": 2684,
          "max_res_clength": 193,
          "avg_res_clength": 103,
          "req_rate": 26,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 3,
          "apdex_tolerated": 21,
          "apdex_score": 0.5192307692307693
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 24010981,
          "external": 2049600,
          "cpu": 2.547331916077647,
          "lag": 0.035727
        }
      },
      "1588093329": {
        "stats": {
          "requests": 18,
          "responses": 18,
          "errors": 2,
          "info": 0,
          "success": 16,
          "redirect": 0,
          "client_error": 2,
          "server_error": 0,
          "total_time": 1028,
          "max_time": 96,
          "avg_time": 57.111111111111114,
          "total_req_clength": 668,
          "max_req_clength": 189,
          "avg_req_clength": 37,
          "total_res_clength": 1429,
          "max_res_clength": 198,
          "avg_res_clength": 79,
          "req_rate": 18,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 12,
          "apdex_score": 0.5555555555555556
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 19155713,
          "external": 1507257,
          "cpu": 1.884250653120607,
          "lag": 0.038118
        }
      },
      "1588093330": {
        "stats": {
          "requests": 32,
          "responses": 32,
          "errors": 4,
          "info": 0,
          "success": 28,
          "redirect": 0,
          "client_error": 3,
          "server_error": 1,
          "total_time": 1620,
          "max_time": 96,
          "avg_time": 50.625,
          "total_req_clength": 1446,
          "max_req_clength": 202,
          "avg_req_clength": 45,
          "total_res_clength": 3350,
          "max_res_clength": 197,
          "avg_res_clength": 104,
          "req_rate": 32,
          "err_rate": 4,
          "apdex_threshold": 25,
          "apdex_satisfied": 7,
          "apdex_tolerated": 21,
          "apdex_score": 0.546875
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 20409071,
          "external": 1645877,
          "cpu": 2.7842863715307264,
          "lag": 0.03864
        }
      },
      "1588093331": {
        "stats": {
          "requests": 23,
          "responses": 23,
          "errors": 4,
          "info": 0,
          "success": 19,
          "redirect": 0,
          "client_error": 3,
          "server_error": 1,
          "total_time": 1037,
          "max_time": 98,
          "avg_time": 45.08695652173913,
          "total_req_clength": 1409,
          "max_req_clength": 185,
          "avg_req_clength": 61,
          "total_res_clength": 2607,
          "max_res_clength": 187,
          "avg_res_clength": 113,
          "req_rate": 23,
          "err_rate": 4,
          "apdex_threshold": 25,
          "apdex_satisfied": 7,
          "apdex_tolerated": 12,
          "apdex_score": 0.5652173913043478
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 21669897,
          "external": 1781483,
          "cpu": 2.8659074236269477,
          "lag": 0.036436
        }
      },
      "1588093332": {
        "stats": {
          "requests": 35,
          "responses": 35,
          "errors": 2,
          "info": 0,
          "success": 33,
          "redirect": 0,
          "client_error": 2,
          "server_error": 0,
          "total_time": 1593,
          "max_time": 100,
          "avg_time": 45.51428571428571,
          "total_req_clength": 2150,
          "max_req_clength": 208,
          "avg_req_clength": 61,
          "total_res_clength": 3370,
          "max_res_clength": 198,
          "avg_res_clength": 96,
          "req_rate": 35,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 6,
          "apdex_tolerated": 27,
          "apdex_score": 0.5571428571428572
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 22840032,
          "external": 1917040,
          "cpu": 2.4501578253046605,
          "lag": 1.849815
        }
      },
      "1588093333": {
        "stats": {
          "requests": 20,
          "responses": 20,
          "errors": 3,
          "info": 0,
          "success": 17,
          "redirect": 0,
          "client_error": 2,
          "server_error": 1,
          "total_time": 1161,
          "max_time": 97,
          "avg_time": 58.05,
          "total_req_clength": 547,
          "max_req_clength": 121,
          "avg_req_clength": 27,
          "total_res_clength": 1897,
          "max_res_clength": 202,
          "avg_res_clength": 94,
          "req_rate": 20,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 3,
          "apdex_tolerated": 14,
          "apdex_score": 0.5
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 24100305,
          "external": 2052019,
          "cpu": 2.0724092824258613,
          "lag": 0.04868
        }
      },
      "1588093334": {
        "stats": {
          "requests": 32,
          "responses": 32,
          "errors": 2,
          "info": 0,
          "success": 30,
          "redirect": 0,
          "client_error": 2,
          "server_error": 0,
          "total_time": 1609,
          "max_time": 95,
          "avg_time": 50.28125,
          "total_req_clength": 2023,
          "max_req_clength": 206,
          "avg_req_clength": 63,
          "total_res_clength": 3360,
          "max_res_clength": 203,
          "avg_res_clength": 105,
          "req_rate": 32,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 5,
          "apdex_tolerated": 25,
          "apdex_score": 0.546875
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 25123809,
          "external": 2191189,
          "cpu": 3.0382591291693912,
          "lag": 0.047287
        }
      },
      "1588093335": {
        "stats": {
          "requests": 13,
          "responses": 13,
          "errors": 2,
          "info": 0,
          "success": 11,
          "redirect": 0,
          "client_error": 2,
          "server_error": 0,
          "total_time": 727,
          "max_time": 99,
          "avg_time": 55.92307692307692,
          "total_req_clength": 957,
          "max_req_clength": 201,
          "avg_req_clength": 73,
          "total_res_clength": 1600,
          "max_res_clength": 199,
          "avg_res_clength": 123,
          "req_rate": 13,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 3,
          "apdex_tolerated": 8,
          "apdex_score": 0.5384615384615384
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 23966291,
          "external": 2055357,
          "cpu": 1.9254082568642377,
          "lag": 0.038919
        }
      },
      "1588093336": {
        "stats": {
          "requests": 24,
          "responses": 24,
          "errors": 2,
          "info": 0,
          "success": 22,
          "redirect": 0,
          "client_error": 1,
          "server_error": 1,
          "total_time": 974,
          "max_time": 88,
          "avg_time": 40.583333333333336,
          "total_req_clength": 1523,
          "max_req_clength": 199,
          "avg_req_clength": 63,
          "total_res_clength": 2300,
          "max_res_clength": 194,
          "avg_res_clength": 95,
          "req_rate": 24,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 8,
          "apdex_tolerated": 14,
          "apdex_score": 0.625
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 19070131,
          "external": 1503755,
          "cpu": 1.9173139808846917,
          "lag": 0.036821
        }
      },
      "1588093337": {
        "stats": {
          "requests": 39,
          "responses": 39,
          "errors": 3,
          "info": 0,
          "success": 36,
          "redirect": 0,
          "client_error": 3,
          "server_error": 0,
          "total_time": 1905,
          "max_time": 96,
          "avg_time": 48.84615384615385,
          "total_req_clength": 1436,
          "max_req_clength": 205,
          "avg_req_clength": 36,
          "total_res_clength": 3417,
          "max_res_clength": 201,
          "avg_res_clength": 87,
          "req_rate": 39,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 6,
          "apdex_tolerated": 30,
          "apdex_score": 0.5384615384615384
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 20285478,
          "external": 1638691,
          "cpu": 3.336869587514194,
          "lag": 0.033396
        }
      },
      "1588093338": {
        "stats": {
          "requests": 46,
          "responses": 46,
          "errors": 3,
          "info": 0,
          "success": 43,
          "redirect": 0,
          "client_error": 1,
          "server_error": 2,
          "total_time": 2311,
          "max_time": 98,
          "avg_time": 50.23913043478261,
          "total_req_clength": 2324,
          "max_req_clength": 210,
          "avg_req_clength": 50,
          "total_res_clength": 4619,
          "max_res_clength": 201,
          "avg_res_clength": 100,
          "req_rate": 46,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 12,
          "apdex_tolerated": 31,
          "apdex_score": 0.5978260869565217
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 21947137,
          "external": 1774397,
          "cpu": 3.360248067465066,
          "lag": 0.033353
        }
      },
      "1588093339": {
        "stats": {
          "requests": 20,
          "responses": 20,
          "errors": 3,
          "info": 0,
          "success": 17,
          "redirect": 0,
          "client_error": 1,
          "server_error": 2,
          "total_time": 1007,
          "max_time": 100,
          "avg_time": 50.35,
          "total_req_clength": 653,
          "max_req_clength": 193,
          "avg_req_clength": 32,
          "total_res_clength": 1956,
          "max_res_clength": 195,
          "avg_res_clength": 97,
          "req_rate": 20,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 5,
          "apdex_tolerated": 12,
          "apdex_score": 0.55
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 23486915,
          "external": 1914570,
          "cpu": 1.847639638563157,
          "lag": 0.030142
        }
      },
      "1588093340": {
        "stats": {
          "requests": 28,
          "responses": 28,
          "errors": 6,
          "info": 0,
          "success": 22,
          "redirect": 0,
          "client_error": 2,
          "server_error": 4,
          "total_time": 1271,
          "max_time": 98,
          "avg_time": 45.392857142857146,
          "total_req_clength": 1678,
          "max_req_clength": 204,
          "avg_req_clength": 59,
          "total_res_clength": 3429,
          "max_res_clength": 196,
          "avg_res_clength": 122,
          "req_rate": 28,
          "err_rate": 6,
          "apdex_threshold": 25,
          "apdex_satisfied": 7,
          "apdex_tolerated": 15,
          "apdex_score": 0.5178571428571429
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 24682232,
          "external": 2052453,
          "cpu": 2.9120891618325944,
          "lag": 0.074106
        }
      },
      "1588093341": {
        "stats": {
          "requests": 20,
          "responses": 20,
          "errors": 0,
          "info": 0,
          "success": 20,
          "redirect": 0,
          "client_error": 0,
          "server_error": 0,
          "total_time": 1115,
          "max_time": 92,
          "avg_time": 55.75,
          "total_req_clength": 1032,
          "max_req_clength": 206,
          "avg_req_clength": 51,
          "total_res_clength": 2046,
          "max_res_clength": 193,
          "avg_res_clength": 102,
          "req_rate": 20,
          "err_rate": 0,
          "apdex_threshold": 25,
          "apdex_satisfied": 3,
          "apdex_tolerated": 17,
          "apdex_score": 0.575
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 25848675,
          "external": 2187146,
          "cpu": 1.3177733068228523,
          "lag": 0.048135
        }
      },
      "1588093342": {
        "stats": {
          "requests": 28,
          "responses": 28,
          "errors": 3,
          "info": 0,
          "success": 25,
          "redirect": 0,
          "client_error": 1,
          "server_error": 2,
          "total_time": 1417,
          "max_time": 100,
          "avg_time": 50.607142857142854,
          "total_req_clength": 1269,
          "max_req_clength": 192,
          "avg_req_clength": 45,
          "total_res_clength": 2869,
          "max_res_clength": 199,
          "avg_res_clength": 102,
          "req_rate": 28,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 5,
          "apdex_tolerated": 20,
          "apdex_score": 0.5357142857142857
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 21168345,
          "external": 1736853,
          "cpu": 2.7638782366151595,
          "lag": 0.06344
        }
      },
      "1588093343": {
        "stats": {
          "requests": 35,
          "responses": 35,
          "errors": 4,
          "info": 0,
          "success": 31,
          "redirect": 0,
          "client_error": 1,
          "server_error": 3,
          "total_time": 1872,
          "max_time": 100,
          "avg_time": 53.48571428571429,
          "total_req_clength": 1508,
          "max_req_clength": 204,
          "avg_req_clength": 43,
          "total_res_clength": 3637,
          "max_res_clength": 200,
          "avg_res_clength": 103,
          "req_rate": 35,
          "err_rate": 4,
          "apdex_threshold": 25,
          "apdex_satisfied": 9,
          "apdex_tolerated": 22,
          "apdex_score": 0.5714285714285714
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 20020321,
          "external": 1638044,
          "cpu": 3.717785955130757,
          "lag": 0.038502
        }
      },
      "1588093344": {
        "stats": {
          "requests": 22,
          "responses": 22,
          "errors": 6,
          "info": 0,
          "success": 16,
          "redirect": 0,
          "client_error": 3,
          "server_error": 3,
          "total_time": 1096,
          "max_time": 97,
          "avg_time": 49.81818181818182,
          "total_req_clength": 1153,
          "max_req_clength": 207,
          "avg_req_clength": 52,
          "total_res_clength": 2092,
          "max_res_clength": 202,
          "avg_res_clength": 95,
          "req_rate": 22,
          "err_rate": 6,
          "apdex_threshold": 25,
          "apdex_satisfied": 5,
          "apdex_tolerated": 11,
          "apdex_score": 0.4772727272727273
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 21165002,
          "external": 1777152,
          "cpu": 2.8889399104706057,
          "lag": 0.049158
        }
      },
      "1588093345": {
        "stats": {
          "requests": 21,
          "responses": 21,
          "errors": 1,
          "info": 0,
          "success": 20,
          "redirect": 0,
          "client_error": 1,
          "server_error": 0,
          "total_time": 912,
          "max_time": 100,
          "avg_time": 43.42857142857143,
          "total_req_clength": 1590,
          "max_req_clength": 171,
          "avg_req_clength": 75,
          "total_res_clength": 2163,
          "max_res_clength": 201,
          "avg_res_clength": 103,
          "req_rate": 21,
          "err_rate": 1,
          "apdex_threshold": 25,
          "apdex_satisfied": 8,
          "apdex_tolerated": 12,
          "apdex_score": 0.6666666666666666
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 22283473,
          "external": 1915431,
          "cpu": 2.341292065973116,
          "lag": 0.066504
        }
      },
      "1588093346": {
        "stats": {
          "requests": 34,
          "responses": 34,
          "errors": 5,
          "info": 0,
          "success": 29,
          "redirect": 0,
          "client_error": 2,
          "server_error": 3,
          "total_time": 1648,
          "max_time": 98,
          "avg_time": 48.470588235294116,
          "total_req_clength": 1291,
          "max_req_clength": 188,
          "avg_req_clength": 37,
          "total_res_clength": 3574,
          "max_res_clength": 203,
          "avg_res_clength": 105,
          "req_rate": 34,
          "err_rate": 5,
          "apdex_threshold": 25,
          "apdex_satisfied": 8,
          "apdex_tolerated": 21,
          "apdex_score": 0.5441176470588235
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 23554059,
          "external": 2051246,
          "cpu": 3.3564382028964297,
          "lag": 0.059577
        }
      },
      "1588093347": {
        "stats": {
          "requests": 20,
          "responses": 20,
          "errors": 6,
          "info": 0,
          "success": 14,
          "redirect": 0,
          "client_error": 4,
          "server_error": 2,
          "total_time": 981,
          "max_time": 98,
          "avg_time": 49.05,
          "total_req_clength": 850,
          "max_req_clength": 175,
          "avg_req_clength": 42,
          "total_res_clength": 2113,
          "max_res_clength": 191,
          "avg_res_clength": 105,
          "req_rate": 20,
          "err_rate": 6,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 10,
          "apdex_score": 0.45
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 24648693,
          "external": 2185193,
          "cpu": 2.1327581336197605,
          "lag": 0.043375
        }
      },
      "1588093348": {
        "stats": {
          "requests": 21,
          "responses": 21,
          "errors": 4,
          "info": 0,
          "success": 17,
          "redirect": 0,
          "client_error": 4,
          "server_error": 0,
          "total_time": 1026,
          "max_time": 91,
          "avg_time": 48.857142857142854,
          "total_req_clength": 847,
          "max_req_clength": 185,
          "avg_req_clength": 40,
          "total_res_clength": 2492,
          "max_res_clength": 199,
          "avg_res_clength": 118,
          "req_rate": 21,
          "err_rate": 4,
          "apdex_threshold": 25,
          "apdex_satisfied": 5,
          "apdex_tolerated": 12,
          "apdex_score": 0.5238095238095238
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 25608843,
          "external": 2319055,
          "cpu": 1.962467199874005,
          "lag": 0.039406
        }
      },
      "1588093349": {
        "stats": {
          "requests": 27,
          "responses": 27,
          "errors": 2,
          "info": 0,
          "success": 25,
          "redirect": 0,
          "client_error": 1,
          "server_error": 1,
          "total_time": 1294,
          "max_time": 99,
          "avg_time": 47.925925925925924,
          "total_req_clength": 1658,
          "max_req_clength": 208,
          "avg_req_clength": 61,
          "total_res_clength": 2576,
          "max_res_clength": 198,
          "avg_res_clength": 95,
          "req_rate": 27,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 8,
          "apdex_tolerated": 17,
          "apdex_score": 0.6111111111111112
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 23215480,
          "external": 1990562,
          "cpu": 2.156275637836824,
          "lag": 0.038102
        }
      },
      "1588093350": {
        "stats": {
          "requests": 28,
          "responses": 28,
          "errors": 5,
          "info": 0,
          "success": 23,
          "redirect": 0,
          "client_error": 5,
          "server_error": 0,
          "total_time": 1429,
          "max_time": 99,
          "avg_time": 51.035714285714285,
          "total_req_clength": 1249,
          "max_req_clength": 193,
          "avg_req_clength": 44,
          "total_res_clength": 3082,
          "max_res_clength": 195,
          "avg_res_clength": 110,
          "req_rate": 28,
          "err_rate": 5,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 19,
          "apdex_score": 0.48214285714285715
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 19952813,
          "external": 1506251,
          "cpu": 2.7071640829954027,
          "lag": 0.035514
        }
      },
      "1588093351": {
        "stats": {
          "requests": 28,
          "responses": 28,
          "errors": 2,
          "info": 0,
          "success": 26,
          "redirect": 0,
          "client_error": 1,
          "server_error": 1,
          "total_time": 1270,
          "max_time": 93,
          "avg_time": 45.357142857142854,
          "total_req_clength": 1763,
          "max_req_clength": 200,
          "avg_req_clength": 62,
          "total_res_clength": 2487,
          "max_res_clength": 197,
          "avg_res_clength": 88,
          "req_rate": 28,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 9,
          "apdex_tolerated": 17,
          "apdex_score": 0.625
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 21057538,
          "external": 1641335,
          "cpu": 1.4879636535971372,
          "lag": 0.028411
        }
      },
      "1588093352": {
        "stats": {
          "requests": 24,
          "responses": 24,
          "errors": 3,
          "info": 0,
          "success": 21,
          "redirect": 0,
          "client_error": 1,
          "server_error": 2,
          "total_time": 1199,
          "max_time": 98,
          "avg_time": 49.958333333333336,
          "total_req_clength": 787,
          "max_req_clength": 142,
          "avg_req_clength": 32,
          "total_res_clength": 2383,
          "max_res_clength": 174,
          "avg_res_clength": 99,
          "req_rate": 24,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 6,
          "apdex_tolerated": 15,
          "apdex_score": 0.5625
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 22227298,
          "external": 1776364,
          "cpu": 1.190604606663778,
          "lag": 0.027186
        }
      },
      "1588093353": {
        "stats": {
          "requests": 25,
          "responses": 25,
          "errors": 0,
          "info": 0,
          "success": 25,
          "redirect": 0,
          "client_error": 0,
          "server_error": 0,
          "total_time": 1259,
          "max_time": 99,
          "avg_time": 50.36,
          "total_req_clength": 1122,
          "max_req_clength": 165,
          "avg_req_clength": 44,
          "total_res_clength": 2204,
          "max_res_clength": 186,
          "avg_res_clength": 88,
          "req_rate": 25,
          "err_rate": 0,
          "apdex_threshold": 25,
          "apdex_satisfied": 5,
          "apdex_tolerated": 20,
          "apdex_score": 0.6
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 23332129,
          "external": 1910798,
          "cpu": 1.4771758064135279,
          "lag": 0.252796
        }
      },
      "1588093354": {
        "stats": {
          "requests": 24,
          "responses": 24,
          "errors": 1,
          "info": 0,
          "success": 23,
          "redirect": 0,
          "client_error": 1,
          "server_error": 0,
          "total_time": 1347,
          "max_time": 100,
          "avg_time": 56.125,
          "total_req_clength": 1133,
          "max_req_clength": 191,
          "avg_req_clength": 47,
          "total_res_clength": 2796,
          "max_res_clength": 199,
          "avg_res_clength": 116,
          "req_rate": 24,
          "err_rate": 1,
          "apdex_threshold": 25,
          "apdex_satisfied": 2,
          "apdex_tolerated": 21,
          "apdex_score": 0.5208333333333334
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 24538029,
          "external": 2050120,
          "cpu": 2.762364973869414,
          "lag": 0.043671
        }
      },
      "1588093355": {
        "stats": {
          "requests": 25,
          "responses": 25,
          "errors": 5,
          "info": 0,
          "success": 20,
          "redirect": 0,
          "client_error": 5,
          "server_error": 0,
          "total_time": 945,
          "max_time": 97,
          "avg_time": 37.8,
          "total_req_clength": 1567,
          "max_req_clength": 210,
          "avg_req_clength": 62,
          "total_res_clength": 2652,
          "max_res_clength": 198,
          "avg_res_clength": 106,
          "req_rate": 25,
          "err_rate": 5,
          "apdex_threshold": 25,
          "apdex_satisfied": 6,
          "apdex_tolerated": 14,
          "apdex_score": 0.52
        },
        "sys": {
          "rss": 73764864,
          "heapTotal": 36741120,
          "heapUsed": 25744890,
          "external": 2188733,
          "cpu": 2.5647772543208234,
          "lag": 0.043334
        }
      },
      "1588093356": {
        "stats": {
          "requests": 21,
          "responses": 21,
          "errors": 5,
          "info": 0,
          "success": 16,
          "redirect": 0,
          "client_error": 4,
          "server_error": 1,
          "total_time": 1214,
          "max_time": 99,
          "avg_time": 57.80952380952381,
          "total_req_clength": 970,
          "max_req_clength": 203,
          "avg_req_clength": 46,
          "total_res_clength": 1854,
          "max_res_clength": 198,
          "avg_res_clength": 88,
          "req_rate": 21,
          "err_rate": 5,
          "apdex_threshold": 25,
          "apdex_satisfied": 2,
          "apdex_tolerated": 14,
          "apdex_score": 0.42857142857142855
        },
        "sys": {
          "rss": 73886574,
          "heapTotal": 36741120,
          "heapUsed": 23205776,
          "external": 1914977,
          "cpu": 2.4633974778722925,
          "lag": 0.040597
        }
      },
      "1588093357": {
        "stats": {
          "requests": 15,
          "responses": 15,
          "errors": 4,
          "info": 0,
          "success": 11,
          "redirect": 0,
          "client_error": 3,
          "server_error": 1,
          "total_time": 696,
          "max_time": 99,
          "avg_time": 46.4,
          "total_req_clength": 711,
          "max_req_clength": 197,
          "avg_req_clength": 47,
          "total_res_clength": 1638,
          "max_res_clength": 199,
          "avg_res_clength": 109,
          "req_rate": 15,
          "err_rate": 4,
          "apdex_threshold": 25,
          "apdex_satisfied": 2,
          "apdex_tolerated": 9,
          "apdex_score": 0.43333333333333335
        },
        "sys": {
          "rss": 73977856,
          "heapTotal": 36741120,
          "heapUsed": 19365321,
          "external": 1504178,
          "cpu": 1.7119514670036935,
          "lag": 0.046086
        }
      },
      "1588093358": {
        "stats": {
          "requests": 21,
          "responses": 21,
          "errors": 0,
          "info": 0,
          "success": 21,
          "redirect": 0,
          "client_error": 0,
          "server_error": 0,
          "total_time": 1100,
          "max_time": 97,
          "avg_time": 52.38095238095238,
          "total_req_clength": 724,
          "max_req_clength": 134,
          "avg_req_clength": 34,
          "total_res_clength": 2420,
          "max_res_clength": 199,
          "avg_res_clength": 115,
          "req_rate": 21,
          "err_rate": 0,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 17,
          "apdex_score": 0.5952380952380952
        },
        "sys": {
          "rss": 73977856,
          "heapTotal": 36741120,
          "heapUsed": 20090911,
          "external": 1637153,
          "cpu": 2.532131924081231,
          "lag": 0.039959
        }
      },
      "1588093359": {
        "stats": {
          "requests": 19,
          "responses": 19,
          "errors": 2,
          "info": 0,
          "success": 17,
          "redirect": 0,
          "client_error": 1,
          "server_error": 1,
          "total_time": 1003,
          "max_time": 100,
          "avg_time": 52.78947368421053,
          "total_req_clength": 1290,
          "max_req_clength": 197,
          "avg_req_clength": 67,
          "total_res_clength": 1744,
          "max_res_clength": 189,
          "avg_res_clength": 91,
          "req_rate": 19,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 13,
          "apdex_score": 0.5526315789473685
        },
        "sys": {
          "rss": 73977856,
          "heapTotal": 36741120,
          "heapUsed": 20966735,
          "external": 1771233,
          "cpu": 2.2868132815216007,
          "lag": 0.651047
        }
      },
      "1588093360": {
        "stats": {
          "requests": 20,
          "responses": 20,
          "errors": 2,
          "info": 0,
          "success": 18,
          "redirect": 0,
          "client_error": 1,
          "server_error": 1,
          "total_time": 864,
          "max_time": 94,
          "avg_time": 43.2,
          "total_req_clength": 861,
          "max_req_clength": 187,
          "avg_req_clength": 43,
          "total_res_clength": 2384,
          "max_res_clength": 194,
          "avg_res_clength": 119,
          "req_rate": 20,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 7,
          "apdex_tolerated": 11,
          "apdex_score": 0.625
        },
        "sys": {
          "rss": 73977856,
          "heapTotal": 36741120,
          "heapUsed": 21916603,
          "external": 1909965,
          "cpu": 1.9388896811232033,
          "lag": 0.048814
        }
      },
      "1588093361": {
        "stats": {
          "requests": 15,
          "responses": 15,
          "errors": 2,
          "info": 0,
          "success": 13,
          "redirect": 0,
          "client_error": 0,
          "server_error": 2,
          "total_time": 722,
          "max_time": 88,
          "avg_time": 48.13333333333333,
          "total_req_clength": 657,
          "max_req_clength": 206,
          "avg_req_clength": 43,
          "total_res_clength": 1601,
          "max_res_clength": 199,
          "avg_res_clength": 106,
          "req_rate": 15,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 9,
          "apdex_score": 0.5666666666666667
        },
        "sys": {
          "rss": 73977856,
          "heapTotal": 36741120,
          "heapUsed": 22725769,
          "external": 2047210,
          "cpu": 1.6866602960941097,
          "lag": 0.038996
        }
      },
      "1588093362": {
        "stats": {
          "requests": 28,
          "responses": 28,
          "errors": 3,
          "info": 0,
          "success": 25,
          "redirect": 0,
          "client_error": 3,
          "server_error": 0,
          "total_time": 1460,
          "max_time": 99,
          "avg_time": 52.142857142857146,
          "total_req_clength": 1394,
          "max_req_clength": 187,
          "avg_req_clength": 49,
          "total_res_clength": 2936,
          "max_res_clength": 199,
          "avg_res_clength": 104,
          "req_rate": 28,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 7,
          "apdex_tolerated": 18,
          "apdex_score": 0.5714285714285714
        },
        "sys": {
          "rss": 73977856,
          "heapTotal": 36741120,
          "heapUsed": 23846353,
          "external": 2181598,
          "cpu": 2.505626343880352,
          "lag": 0.052258
        }
      },
      "1588093363": {
        "stats": {
          "requests": 28,
          "responses": 28,
          "errors": 5,
          "info": 0,
          "success": 23,
          "redirect": 0,
          "client_error": 4,
          "server_error": 1,
          "total_time": 1677,
          "max_time": 98,
          "avg_time": 59.892857142857146,
          "total_req_clength": 889,
          "max_req_clength": 197,
          "avg_req_clength": 31,
          "total_res_clength": 2623,
          "max_res_clength": 201,
          "avg_res_clength": 93,
          "req_rate": 28,
          "err_rate": 5,
          "apdex_threshold": 25,
          "apdex_satisfied": 3,
          "apdex_tolerated": 20,
          "apdex_score": 0.4642857142857143
        },
        "sys": {
          "rss": 73977856,
          "heapTotal": 36741120,
          "heapUsed": 24853362,
          "external": 2315416,
          "cpu": 2.1818431968844685,
          "lag": 0.038622
        }
      },
      "1588093364": {
        "stats": {
          "requests": 19,
          "responses": 19,
          "errors": 2,
          "info": 0,
          "success": 17,
          "redirect": 0,
          "client_error": 0,
          "server_error": 2,
          "total_time": 1015,
          "max_time": 95,
          "avg_time": 53.421052631578945,
          "total_req_clength": 917,
          "max_req_clength": 180,
          "avg_req_clength": 48,
          "total_res_clength": 2038,
          "max_res_clength": 202,
          "avg_res_clength": 107,
          "req_rate": 19,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 4,
          "apdex_tolerated": 13,
          "apdex_score": 0.5526315789473685
        },
        "sys": {
          "rss": 73977856,
          "heapTotal": 36741120,
          "heapUsed": 25930435,
          "external": 2449100,
          "cpu": 2.1057517442363727,
          "lag": 0.09267
        }
      },
      "1588093365": {
        "stats": {
          "requests": 31,
          "responses": 31,
          "errors": 6,
          "info": 0,
          "success": 25,
          "redirect": 0,
          "client_error": 4,
          "server_error": 2,
          "total_time": 1784,
          "max_time": 98,
          "avg_time": 57.54838709677419,
          "total_req_clength": 1136,
          "max_req_clength": 173,
          "avg_req_clength": 36,
          "total_res_clength": 2790,
          "max_res_clength": 201,
          "avg_res_clength": 90,
          "req_rate": 31,
          "err_rate": 5,
          "apdex_threshold": 25,
          "apdex_satisfied": 5,
          "apdex_tolerated": 20,
          "apdex_score": 0.4838709677419355
        },
        "sys": {
          "rss": 62924507,
          "heapTotal": 25506377,
          "heapUsed": 21132401,
          "external": 1795185,
          "cpu": 4.10721788855931,
          "lag": 0.042131
        }
      },
      "1588093366": {
        "stats": {
          "requests": 21,
          "responses": 21,
          "errors": 2,
          "info": 0,
          "success": 19,
          "redirect": 0,
          "client_error": 2,
          "server_error": 0,
          "total_time": 1155,
          "max_time": 96,
          "avg_time": 55,
          "total_req_clength": 853,
          "max_req_clength": 195,
          "avg_req_clength": 40,
          "total_res_clength": 1673,
          "max_res_clength": 189,
          "avg_res_clength": 79,
          "req_rate": 21,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 2,
          "apdex_tolerated": 17,
          "apdex_score": 0.5
        },
        "sys": {
          "rss": 58122825,
          "heapTotal": 21012480,
          "heapUsed": 18982214,
          "external": 1464809,
          "cpu": 2.791319096596079,
          "lag": 0.044668
        }
      },
      "1588093367": {
        "stats": {
          "requests": 17,
          "responses": 17,
          "errors": 0,
          "info": 0,
          "success": 17,
          "redirect": 0,
          "client_error": 0,
          "server_error": 0,
          "total_time": 998,
          "max_time": 93,
          "avg_time": 58.705882352941174,
          "total_req_clength": 612,
          "max_req_clength": 184,
          "avg_req_clength": 36,
          "total_res_clength": 1641,
          "max_res_clength": 192,
          "avg_res_clength": 96,
          "req_rate": 17,
          "err_rate": 0,
          "apdex_threshold": 25,
          "apdex_satisfied": 3,
          "apdex_tolerated": 14,
          "apdex_score": 0.5882352941176471
        },
        "sys": {
          "rss": 58370926,
          "heapTotal": 21461870,
          "heapUsed": 18886707,
          "external": 1445883,
          "cpu": 3.071822693677625,
          "lag": 0.050659
        }
      },
      "1588093368": {
        "stats": {
          "requests": 44,
          "responses": 44,
          "errors": 5,
          "info": 0,
          "success": 39,
          "redirect": 0,
          "client_error": 1,
          "server_error": 4,
          "total_time": 2392,
          "max_time": 99,
          "avg_time": 54.36363636363637,
          "total_req_clength": 1967,
          "max_req_clength": 200,
          "avg_req_clength": 44,
          "total_res_clength": 3985,
          "max_res_clength": 203,
          "avg_res_clength": 90,
          "req_rate": 44,
          "err_rate": 4,
          "apdex_threshold": 25,
          "apdex_satisfied": 8,
          "apdex_tolerated": 31,
          "apdex_score": 0.5340909090909091
        },
        "sys": {
          "rss": 59241033,
          "heapTotal": 22061056,
          "heapUsed": 19014303,
          "external": 1446710,
          "cpu": 5.733067540274729,
          "lag": 0.051583
        }
      },
      "1588093369": {
        "stats": {
          "requests": 10,
          "responses": 10,
          "errors": 3,
          "info": 0,
          "success": 7,
          "redirect": 0,
          "client_error": 3,
          "server_error": 0,
          "total_time": 469,
          "max_time": 93,
          "avg_time": 46.9,
          "total_req_clength": 426,
          "max_req_clength": 171,
          "avg_req_clength": 42,
          "total_res_clength": 784,
          "max_res_clength": 173,
          "avg_res_clength": 78,
          "req_rate": 10,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 2,
          "apdex_tolerated": 5,
          "apdex_score": 0.45
        },
        "sys": {
          "rss": 59539456,
          "heapTotal": 22061056,
          "heapUsed": 19352278,
          "external": 1447656,
          "cpu": 1.1848769817757712,
          "lag": 0.212681
        }
      },
      "1588093370": {
        "stats": {
          "requests": 30,
          "responses": 30,
          "errors": 3,
          "info": 0,
          "success": 27,
          "redirect": 0,
          "client_error": 2,
          "server_error": 1,
          "total_time": 1713,
          "max_time": 97,
          "avg_time": 57.1,
          "total_req_clength": 1403,
          "max_req_clength": 206,
          "avg_req_clength": 46,
          "total_res_clength": 2602,
          "max_res_clength": 197,
          "avg_res_clength": 86,
          "req_rate": 30,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 5,
          "apdex_tolerated": 22,
          "apdex_score": 0.5333333333333333
        },
        "sys": {
          "rss": 59539456,
          "heapTotal": 22061056,
          "heapUsed": 19298255,
          "external": 1451255,
          "cpu": 2.9446360784170187,
          "lag": 0.437293
        }
      },
      "1588093371": {
        "stats": {
          "requests": 19,
          "responses": 19,
          "errors": 2,
          "info": 0,
          "success": 17,
          "redirect": 0,
          "client_error": 2,
          "server_error": 0,
          "total_time": 916,
          "max_time": 98,
          "avg_time": 48.21052631578947,
          "total_req_clength": 789,
          "max_req_clength": 163,
          "avg_req_clength": 41,
          "total_res_clength": 1772,
          "max_res_clength": 189,
          "avg_res_clength": 93,
          "req_rate": 19,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 6,
          "apdex_tolerated": 11,
          "apdex_score": 0.6052631578947368
        },
        "sys": {
          "rss": 59539456,
          "heapTotal": 22061056,
          "heapUsed": 19279294,
          "external": 1511213,
          "cpu": 2.297047862743695,
          "lag": 0.604641
        }
      },
      "1588093372": {
        "stats": {
          "requests": 35,
          "responses": 35,
          "errors": 3,
          "info": 0,
          "success": 32,
          "redirect": 0,
          "client_error": 1,
          "server_error": 2,
          "total_time": 1630,
          "max_time": 92,
          "avg_time": 46.57142857142857,
          "total_req_clength": 1834,
          "max_req_clength": 181,
          "avg_req_clength": 52,
          "total_res_clength": 3309,
          "max_res_clength": 199,
          "avg_res_clength": 94,
          "req_rate": 35,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 7,
          "apdex_tolerated": 25,
          "apdex_score": 0.5571428571428572
        },
        "sys": {
          "rss": 59539456,
          "heapTotal": 22061056,
          "heapUsed": 19107458,
          "external": 1510514,
          "cpu": 3.6450055521546667,
          "lag": 0.08222
        }
      },
      "1588093373": {
        "stats": {
          "requests": 46,
          "responses": 46,
          "errors": 3,
          "info": 0,
          "success": 43,
          "redirect": 0,
          "client_error": 2,
          "server_error": 1,
          "total_time": 2359,
          "max_time": 99,
          "avg_time": 51.28260869565217,
          "total_req_clength": 2416,
          "max_req_clength": 199,
          "avg_req_clength": 52,
          "total_res_clength": 4226,
          "max_res_clength": 180,
          "avg_res_clength": 91,
          "req_rate": 46,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 11,
          "apdex_tolerated": 32,
          "apdex_score": 0.5869565217391305
        },
        "sys": {
          "rss": 59539456,
          "heapTotal": 22061056,
          "heapUsed": 19256590,
          "external": 1454548,
          "cpu": 4.428774739973542,
          "lag": 0.571222
        }
      },
      "1588093374": {
        "stats": {
          "requests": 20,
          "responses": 20,
          "errors": 1,
          "info": 0,
          "success": 19,
          "redirect": 0,
          "client_error": 0,
          "server_error": 1,
          "total_time": 1257,
          "max_time": 97,
          "avg_time": 62.85,
          "total_req_clength": 578,
          "max_req_clength": 169,
          "avg_req_clength": 28,
          "total_res_clength": 2272,
          "max_res_clength": 187,
          "avg_res_clength": 113,
          "req_rate": 20,
          "err_rate": 1,
          "apdex_threshold": 25,
          "apdex_satisfied": 1,
          "apdex_tolerated": 18,
          "apdex_score": 0.5
        },
        "sys": {
          "rss": 59539456,
          "heapTotal": 22061056,
          "heapUsed": 19194377,
          "external": 1492750,
          "cpu": 2.3213625620952487,
          "lag": 0.039826
        }
      },
      "1588093375": {
        "stats": {
          "requests": 20,
          "responses": 20,
          "errors": 1,
          "info": 0,
          "success": 19,
          "redirect": 0,
          "client_error": 1,
          "server_error": 0,
          "total_time": 991,
          "max_time": 94,
          "avg_time": 49.55,
          "total_req_clength": 860,
          "max_req_clength": 183,
          "avg_req_clength": 43,
          "total_res_clength": 2461,
          "max_res_clength": 197,
          "avg_res_clength": 123,
          "req_rate": 20,
          "err_rate": 1,
          "apdex_threshold": 25,
          "apdex_satisfied": 5,
          "apdex_tolerated": 14,
          "apdex_score": 0.6
        },
        "sys": {
          "rss": 59539456,
          "heapTotal": 22959835,
          "heapUsed": 19207573,
          "external": 1459292,
          "cpu": 2.470910080352385,
          "lag": 0.053224
        }
      },
      "1588093376": {
        "stats": {
          "requests": 36,
          "responses": 36,
          "errors": 4,
          "info": 0,
          "success": 32,
          "redirect": 0,
          "client_error": 3,
          "server_error": 1,
          "total_time": 1940,
          "max_time": 100,
          "avg_time": 53.888888888888886,
          "total_req_clength": 1041,
          "max_req_clength": 171,
          "avg_req_clength": 28,
          "total_res_clength": 4235,
          "max_res_clength": 203,
          "avg_res_clength": 117,
          "req_rate": 36,
          "err_rate": 4,
          "apdex_threshold": 25,
          "apdex_satisfied": 6,
          "apdex_tolerated": 26,
          "apdex_score": 0.5277777777777778
        },
        "sys": {
          "rss": 60039168,
          "heapTotal": 24158208,
          "heapUsed": 19765240,
          "external": 1502164,
          "cpu": 4.03756070944782,
          "lag": 0.047446
        }
      },
      "1588093377": {
        "stats": {
          "requests": 25,
          "responses": 25,
          "errors": 0,
          "info": 0,
          "success": 25,
          "redirect": 0,
          "client_error": 0,
          "server_error": 0,
          "total_time": 1149,
          "max_time": 98,
          "avg_time": 45.96,
          "total_req_clength": 1285,
          "max_req_clength": 203,
          "avg_req_clength": 51,
          "total_res_clength": 2275,
          "max_res_clength": 197,
          "avg_res_clength": 91,
          "req_rate": 25,
          "err_rate": 0,
          "apdex_threshold": 25,
          "apdex_satisfied": 7,
          "apdex_tolerated": 18,
          "apdex_score": 0.64
        },
        "sys": {
          "rss": 60616704,
          "heapTotal": 24158208,
          "heapUsed": 19369841,
          "external": 1520494,
          "cpu": 2.458837398506848,
          "lag": 0.04581
        }
      },
      "1588093378": {
        "stats": {
          "requests": 17,
          "responses": 17,
          "errors": 3,
          "info": 0,
          "success": 14,
          "redirect": 0,
          "client_error": 2,
          "server_error": 1,
          "total_time": 664,
          "max_time": 98,
          "avg_time": 39.05882352941177,
          "total_req_clength": 691,
          "max_req_clength": 170,
          "avg_req_clength": 40,
          "total_res_clength": 1843,
          "max_res_clength": 203,
          "avg_res_clength": 108,
          "req_rate": 17,
          "err_rate": 3,
          "apdex_threshold": 25,
          "apdex_satisfied": 7,
          "apdex_tolerated": 7,
          "apdex_score": 0.6176470588235294
        },
        "sys": {
          "rss": 60964279,
          "heapTotal": 24158208,
          "heapUsed": 20103174,
          "external": 1653549,
          "cpu": 1.9286868748144468,
          "lag": 0.04257
        }
      },
      "1588093379": {
        "stats": {
          "requests": 21,
          "responses": 21,
          "errors": 2,
          "info": 0,
          "success": 19,
          "redirect": 0,
          "client_error": 1,
          "server_error": 1,
          "total_time": 938,
          "max_time": 87,
          "avg_time": 44.666666666666664,
          "total_req_clength": 1252,
          "max_req_clength": 202,
          "avg_req_clength": 59,
          "total_res_clength": 2565,
          "max_res_clength": 199,
          "avg_res_clength": 122,
          "req_rate": 21,
          "err_rate": 2,
          "apdex_threshold": 25,
          "apdex_satisfied": 6,
          "apdex_tolerated": 13,
          "apdex_score": 0.5952380952380952
        },
        "sys": {
          "rss": 61582190,
          "heapTotal": 24158208,
          "heapUsed": 19839255,
          "external": 1633434,
          "cpu": 2.1236168847097656,
          "lag": 0.038602
        }
      },
      "1588093380": {
        "stats": {
          "requests": 0,
          "responses": 0,
          "errors": 0,
          "info": 0,
          "success": 0,
          "redirect": 0,
          "client_error": 0,
          "server_error": 0,
          "total_time": 0,
          "max_time": 0,
          "avg_time": 0,
          "total_req_clength": 0,
          "max_req_clength": 0,
          "avg_req_clength": 0,
          "total_res_clength": 0,
          "max_res_clength": 0,
          "avg_res_clength": 0,
          "req_rate": 0,
          "err_rate": 0,
          "apdex_threshold": 25,
          "apdex_satisfied": 0,
          "apdex_tolerated": 0,
          "apdex_score": 0
        },
        "sys": {
          "rss": 61698048,
          "heapTotal": 24158208,
          "heapUsed": 19610040,
          "external": 1576443,
          "cpu": 0.14810571223236643
        }
      }
    }
  },
  "errors": {
    "statuscode": {
      "401": 213,
      "404": 702,
      "500": 224,
      "501": 263
    },
    "topnotfound": {
      "/v2/pet": 60,
      "/v2/store/inventory": 27,
      "/v2/user/abcde": 104,
      "/v2/pet/findByStatus": 28,
      "/v2/user/logout": 38,
      "/v2/user/createWithList": 35,
      "/v2/pet/findByTags": 34,
      "/v2/pet/12345": 113,
      "/v2/pet/12345/uploadImage": 46,
      "/v2/user/createWithArray": 37,
      "/v2/user/login": 40,
      "/v2/user": 28,
      "/v2/store/order/12345": 83,
      "/v2/store/order": 29
    },
    "topservererror": {
      "/v2/user/createWithList": 15,
      "/v2/user/abcde": 31,
      "/v2/pet": 23,
      "/v2/user/logout": 17,
      "/v2/pet/12345": 33,
      "/v2/pet/findByTags": 13,
      "/v2/user": 20,
      "/v2/user/createWithArray": 11,
      "/v2/store/order/12345": 18,
      "/v2/user/login": 9,
      "/v2/pet/findByStatus": 9,
      "/v2/pet/12345/uploadImage": 7,
      "/v2/store/inventory": 12,
      "/v2/store/order": 6
    }
  }
}


================================================
FILE: src/data/hitsdata.json
================================================
[
  {
    "path": "/pets",
    "method": "GET",
    "query": "GET /pets",
    "startts": 1591661376075,
    "endts": 1591661376117,
    "responsetime": 42,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":40,\"payloadsize\":110}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 110
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:36.075Z",
    "api": {
      "path": "/pets",
      "query": "GET /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "findPets",
      "params": {}
    }
  },
  {
    "path": "/pets/abcde",
    "method": "GET",
    "query": "GET /pets/abcde",
    "startts": 1591661375503,
    "endts": 1591661375578,
    "responsetime": 75,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":74,\"payloadsize\":53}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 53
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:35.503Z",
    "api": {
      "path": "/pets/{id}",
      "query": "GET /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "find pet by id",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets",
    "method": "GET",
    "query": "GET /pets",
    "startts": 1591661375502,
    "endts": 1591661375542,
    "responsetime": 40,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":39,\"payloadsize\":109}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 109
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:35.502Z",
    "api": {
      "path": "/pets",
      "query": "GET /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "findPets",
      "params": {}
    }
  },
  {
    "path": "/pets",
    "method": "POST",
    "query": "POST /pets",
    "startts": 1591661375502,
    "endts": 1591661375551,
    "responsetime": 49,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":48,\"payloadsize\":77}",
          "content-type": "application/json",
          "content-length": "184",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 184,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 77
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:35.502Z",
    "api": {
      "path": "/pets",
      "query": "POST /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "addPet"
    }
  },
  {
    "path": "/pets/abcde",
    "method": "GET",
    "query": "GET /pets/abcde",
    "startts": 1591661375059,
    "endts": 1591661375070,
    "responsetime": 11,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":10,\"payloadsize\":76}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 76
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:35.059Z",
    "api": {
      "path": "/pets/{id}",
      "query": "GET /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "find pet by id",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets",
    "method": "POST",
    "query": "POST /pets",
    "startts": 1591661375058,
    "endts": 1591661375125,
    "responsetime": 67,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":66,\"payloadsize\":72}",
          "content-type": "application/json",
          "content-length": "82",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 82,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 72
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:35.058Z",
    "api": {
      "path": "/pets",
      "query": "POST /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "addPet"
    }
  },
  {
    "path": "/pets",
    "method": "GET",
    "query": "GET /pets",
    "startts": 1591661375057,
    "endts": 1591661375083,
    "responsetime": 26,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":26,\"payloadsize\":158}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 158
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:35.057Z",
    "api": {
      "path": "/pets",
      "query": "GET /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "findPets",
      "params": {}
    }
  },
  {
    "path": "/pets",
    "method": "POST",
    "query": "POST /pets",
    "startts": 1591661374819,
    "endts": 1591661374867,
    "responsetime": 48,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":47,\"payloadsize\":81}",
          "content-type": "application/json",
          "content-length": "37",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 37,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 81
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:34.819Z",
    "api": {
      "path": "/pets",
      "query": "POST /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "addPet"
    }
  },
  {
    "path": "/pets/abcde",
    "method": "GET",
    "query": "GET /pets/abcde",
    "startts": 1591661374819,
    "endts": 1591661374895,
    "responsetime": 76,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":76,\"payloadsize\":126}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 126
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:34.819Z",
    "api": {
      "path": "/pets/{id}",
      "query": "GET /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "find pet by id",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets",
    "method": "GET",
    "query": "GET /pets",
    "startts": 1591661374818,
    "endts": 1591661374894,
    "responsetime": 76,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":76,\"payloadsize\":5}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 5
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:34.818Z",
    "api": {
      "path": "/pets",
      "query": "GET /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "findPets",
      "params": {}
    }
  },
  {
    "path": "/pets/abcde",
    "method": "GET",
    "query": "GET /pets/abcde",
    "startts": 1591661374337,
    "endts": 1591661374343,
    "responsetime": 6,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":5,\"payloadsize\":66}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 66
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:34.337Z",
    "api": {
      "path": "/pets/{id}",
      "query": "GET /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "find pet by id",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets/abcde",
    "method": "DELETE",
    "query": "DELETE /pets/abcde",
    "startts": 1591661374337,
    "endts": 1591661374432,
    "responsetime": 95,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":95,\"payloadsize\":154}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 154
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:34.337Z",
    "api": {
      "path": "/pets/{id}",
      "query": "DELETE /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "deletePet",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets",
    "method": "POST",
    "query": "POST /pets",
    "startts": 1591661374336,
    "endts": 1591661374434,
    "responsetime": 98,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":97,\"payloadsize\":54}",
          "content-type": "application/json",
          "content-length": "24",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 24,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 54
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:34.336Z",
    "api": {
      "path": "/pets",
      "query": "POST /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "addPet"
    }
  },
  {
    "path": "/pets/abcde",
    "method": "DELETE",
    "query": "DELETE /pets/abcde",
    "startts": 1591661373862,
    "endts": 1591661373892,
    "responsetime": 30,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":30,\"payloadsize\":175}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 175
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:33.862Z",
    "api": {
      "path": "/pets/{id}",
      "query": "DELETE /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "deletePet",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets",
    "method": "POST",
    "query": "POST /pets",
    "startts": 1591661373861,
    "endts": 1591661373905,
    "responsetime": 44,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":404,\"message\":\"Not Found\",\"delay\":43,\"payloadsize\":40}",
          "content-type": "application/json",
          "content-length": "93",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 93,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 404,
        "class": "client_error",
        "phrase": "Not Found",
        "headers": {},
        "clength": 40
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:33.861Z",
    "api": {
      "path": "/pets",
      "query": "POST /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "addPet"
    }
  },
  {
    "path": "/pets",
    "method": "GET",
    "query": "GET /pets",
    "startts": 1591661373860,
    "endts": 1591661373898,
    "responsetime": 38,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":36,\"payloadsize\":161}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 161
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:33.860Z",
    "api": {
      "path": "/pets",
      "query": "GET /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "findPets",
      "params": {}
    }
  },
  {
    "path": "/pets/abcde",
    "method": "DELETE",
    "query": "DELETE /pets/abcde",
    "startts": 1591661373713,
    "endts": 1591661373723,
    "responsetime": 10,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":404,\"message\":\"Not Found\",\"delay\":9,\"payloadsize\":107}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 404,
        "class": "client_error",
        "phrase": "Not Found",
        "headers": {},
        "clength": 107
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:33.713Z",
    "api": {
      "path": "/pets/{id}",
      "query": "DELETE /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "deletePet",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets",
    "method": "POST",
    "query": "POST /pets",
    "startts": 1591661373712,
    "endts": 1591661373718,
    "responsetime": 6,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":4,\"payloadsize\":104}",
          "content-type": "application/json",
          "content-length": "87",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 87,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 104
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:33.712Z",
    "api": {
      "path": "/pets",
      "query": "POST /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "addPet"
    }
  },
  {
    "path": "/pets",
    "method": "GET",
    "query": "GET /pets",
    "startts": 1591661373712,
    "endts": 1591661373722,
    "responsetime": 10,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":9,\"payloadsize\":120}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 120
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:33.712Z",
    "api": {
      "path": "/pets",
      "query": "GET /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "findPets",
      "params": {}
    }
  },
  {
    "path": "/pets/abcde",
    "method": "DELETE",
    "query": "DELETE /pets/abcde",
    "startts": 1591661373264,
    "endts": 1591661373268,
    "responsetime": 4,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":3,\"payloadsize\":137}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 137
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:33.264Z",
    "api": {
      "path": "/pets/{id}",
      "query": "DELETE /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "deletePet",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets",
    "method": "GET",
    "query": "GET /pets",
    "startts": 1591661373263,
    "endts": 1591661373264,
    "responsetime": 1,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":500,\"message\":\"Internal Server Error\",\"delay\":1,\"payloadsize\":56}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 500,
        "class": "server_error",
        "phrase": "Internal Server Error",
        "headers": {},
        "clength": 56
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:33.263Z",
    "api": {
      "path": "/pets",
      "query": "GET /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "findPets",
      "params": {}
    }
  },
  {
    "path": "/pets",
    "method": "POST",
    "query": "POST /pets",
    "startts": 1591661373263,
    "endts": 1591661373328,
    "responsetime": 65,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":63,\"payloadsize\":173}",
          "content-type": "application/json",
          "content-length": "206",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 206,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 173
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:33.263Z",
    "api": {
      "path": "/pets",
      "query": "POST /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "addPet"
    }
  },
  {
    "path": "/pets/abcde",
    "method": "GET",
    "query": "GET /pets/abcde",
    "startts": 1591661372772,
    "endts": 1591661372847,
    "responsetime": 75,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":501,\"message\":\"Not Implemented\",\"delay\":75,\"payloadsize\":79}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 501,
        "class": "server_error",
        "phrase": "Not Implemented",
        "headers": {},
        "clength": 79
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:32.772Z",
    "api": {
      "path": "/pets/{id}",
      "query": "GET /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "find pet by id",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets",
    "method": "POST",
    "query": "POST /pets",
    "startts": 1591661372771,
    "endts": 1591661372817,
    "responsetime": 46,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":45,\"payloadsize\":176}",
          "content-type": "application/json",
          "content-length": "138",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 138,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 176
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:32.771Z",
    "api": {
      "path": "/pets",
      "query": "POST /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "addPet"
    }
  },
  {
    "path": "/pets",
    "method": "GET",
    "query": "GET /pets",
    "startts": 1591661372771,
    "endts": 1591661372832,
    "responsetime": 61,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":61,\"payloadsize\":141}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 141
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:32.771Z",
    "api": {
      "path": "/pets",
      "query": "GET /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "findPets",
      "params": {}
    }
  },
  {
    "path": "/pets/abcde",
    "method": "DELETE",
    "query": "DELETE /pets/abcde",
    "startts": 1591661372177,
    "endts": 1591661372240,
    "responsetime": 63,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":62,\"payloadsize\":81}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 81
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:32.177Z",
    "api": {
      "path": "/pets/{id}",
      "query": "DELETE /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "deletePet",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets/abcde",
    "method": "GET",
    "query": "GET /pets/abcde",
    "startts": 1591661372176,
    "endts": 1591661372251,
    "responsetime": 75,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":73,\"payloadsize\":30}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 30
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:32.176Z",
    "api": {
      "path": "/pets/{id}",
      "query": "GET /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "find pet by id",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets/abcde",
    "method": "DELETE",
    "query": "DELETE /pets/abcde",
    "startts": 1591661371771,
    "endts": 1591661371773,
    "responsetime": 2,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":\"200\",\"message\":\"OK\",\"delay\":2,\"payloadsize\":113}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 200,
        "class": "success",
        "phrase": "OK",
        "headers": {},
        "clength": 113
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:31.771Z",
    "api": {
      "path": "/pets/{id}",
      "query": "DELETE /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "deletePet",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets/abcde",
    "method": "GET",
    "query": "GET /pets/abcde",
    "startts": 1591661371771,
    "endts": 1591661371809,
    "responsetime": 38,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":404,\"message\":\"Not Found\",\"delay\":38,\"payloadsize\":66}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 404,
        "class": "client_error",
        "phrase": "Not Found",
        "headers": {},
        "clength": 66
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:31.771Z",
    "api": {
      "path": "/pets/{id}",
      "query": "GET /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "find pet by id",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets",
    "method": "POST",
    "query": "POST /pets",
    "startts": 1591661371770,
    "endts": 1591661371816,
    "responsetime": 46,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets",
        "headers": {
          "x-sws-res": "{\"code\":501,\"message\":\"Not Implemented\",\"delay\":46,\"payloadsize\":162}",
          "content-type": "application/json",
          "content-length": "41",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 41,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 501,
        "class": "server_error",
        "phrase": "Not Implemented",
        "headers": {},
        "clength": 162
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:31.770Z",
    "api": {
      "path": "/pets",
      "query": "POST /pets",
      "swagger": true,
      "deprecated": false,
      "operationId": "addPet"
    }
  },
  {
    "path": "/pets/abcde",
    "method": "GET",
    "query": "GET /pets/abcde",
    "startts": 1591661371312,
    "endts": 1591661371337,
    "responsetime": 25,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
        "headers": {
          "x-sws-res": "{\"code\":401,\"message\":\"Unauthorized\",\"delay\":24,\"payloadsize\":67}",
          "host": "localhost:3040",
          "connection": "close"
        },
        "clength": 0,
        "route_path": "/pet*",
        "query": {}
      },
      "response": {
        "code": 401,
        "class": "client_error",
        "phrase": "Unauthorized",
        "headers": {},
        "clength": 67
      }
    },
    "ip": "127.0.0.1",
    "real_ip": "127.0.0.1",
    "port": 3040,
    "@timestamp": "2020-06-09T00:09:31.312Z",
    "api": {
      "path": "/pets/{id}",
      "query": "GET /pets/{id}",
      "swagger": true,
      "deprecated": false,
      "operationId": "find pet by id",
      "params": {
        "id": "abcde"
      }
    }
  },
  {
    "path": "/pets/abcde",
    "method": "DELETE",
    "query": "DELETE /pets/abcde",
    "startts": 1591661370927,
    "endts": 1591661370952,
    "responsetime": 25,
    "node": {
      "name": "swagger-stats-fastify",
      "version": "0.95.17",
      "hostname": "sv5",
      "ip": "192.168.1.71"
    },
    "http": {
      "request": {
        "url": "/pets/abcde",
    
Download .txt
gitextract_2_g3etwt/

├── .editorconfig
├── .eslintignore
├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       └── main.yml
├── .gitignore
├── .prettierrc
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── babel.config.js
├── cypress.json
├── package.json
├── public/
│   ├── googleee01dc033d7bbca2.html
│   └── index.html
├── scripts/
│   └── demodeploy.sh
├── src/
│   ├── App.vue
│   ├── components/
│   │   ├── menu/
│   │   │   ├── menudrawer.vue
│   │   │   ├── menulist.vue
│   │   │   ├── menulistitem.vue
│   │   │   └── menulistitemex.vue
│   │   ├── settings/
│   │   │   ├── colorschemeselector.vue
│   │   │   └── settings.vue
│   │   ├── tables/
│   │   │   ├── htable.vue
│   │   │   ├── itable.vue
│   │   │   └── ptable.vue
│   │   └── user/
│   │       ├── message.vue
│   │       ├── messages.vue
│   │       └── userinfo.vue
│   ├── dashboards/
│   │   ├── ChartJsShowcase.json
│   │   ├── dashfive.json
│   │   ├── dashfour.json
│   │   ├── dashsix.json
│   │   └── dashthree.json
│   ├── data/
│   │   ├── ChartJsShowcase.json
│   │   ├── api.json
│   │   ├── apioperation.json
│   │   ├── errors.json
│   │   ├── hitsdata.json
│   │   ├── iconsmdiv5.json
│   │   ├── itemstabledata.json
│   │   ├── ptabledata.json
│   │   ├── requests.json
│   │   └── summary.json
│   ├── layouts/
│   │   └── mainlayout.vue
│   ├── main.js
│   ├── mixins/
│   │   ├── demodashboard.js
│   │   └── vgtmethods.js
│   ├── pages/
│   │   └── login.vue
│   ├── quasar.js
│   ├── router.js
│   ├── store/
│   │   ├── modules/
│   │   │   └── layout.js
│   │   └── store.js
│   ├── styles/
│   │   ├── quasar.scss
│   │   ├── quasar.variables.scss
│   │   ├── textbgcolors.scss
│   │   ├── ubbox.scss
│   │   ├── ubcode.scss
│   │   └── vgt.scss
│   ├── utils.js
│   └── views/
│       ├── About.vue
│       ├── ChartJsShowcase.vue
│       ├── DashblocksShowcase.vue
│       ├── Dygraphs.vue
│       ├── Home.vue
│       ├── SampleDashboard.vue
│       ├── apiop.vue
│       ├── errors.vue
│       ├── forms.vue
│       ├── materialicons.vue
│       ├── mdi.vue
│       ├── observability.vue
│       ├── quasartable.vue
│       ├── requests.vue
│       ├── summary.vue
│       ├── tables.vue
│       ├── timeline.vue
│       ├── typography.vue
│       └── vuegoodtable.vue
├── tests/
│   ├── e2e/
│   │   ├── .eslintrc.js
│   │   ├── plugins/
│   │   │   └── index.js
│   │   ├── specs/
│   │   │   └── test.js
│   │   └── support/
│   │       ├── commands.js
│   │       └── index.js
│   └── unit/
│       └── .eslintrc.js
└── vue.config.js
Download .txt
SYMBOL INDEX (23 symbols across 4 files)

FILE: src/mixins/demodashboard.js
  method dashboardColorScheme (line 11) | dashboardColorScheme(val) {

FILE: src/mixins/vgtmethods.js
  method tdClassErrors (line 10) | tdClassErrors(row) {
  method tdClassErrRate (line 13) | tdClassErrRate(row) {
  method tdClassCErr (line 16) | tdClassCErr(row) {
  method tdClassSErr (line 19) | tdClassSErr(row) {
  method tdClassApdex (line 22) | tdClassApdex(row) {

FILE: src/store/modules/layout.js
  method SET_DARK (line 17) | SET_DARK(state, { dark }) {
  method SET_MENU_AUTO_EXPAND (line 21) | SET_MENU_AUTO_EXPAND(state, { menuAutoExpand }) {
  method SET_MENU_MINI (line 25) | SET_MENU_MINI(state, { menuMini }) {
  method SET_DASHBOARD_COLOR_SCHEME (line 29) | SET_DASHBOARD_COLOR_SCHEME(state, { dashboardColorScheme }) {
  method setDark (line 36) | setDark({ commit }, { dark }) {
  method setMenuAutoExpand (line 39) | setMenuAutoExpand({ commit }, { menuAutoExpand }) {
  method setMenuMini (line 42) | setMenuMini({ commit }, { menuMini }) {
  method setDashboardColorScheme (line 45) | setDashboardColorScheme({ commit }, { dashboardColorScheme }) {

FILE: src/utils.js
  class Utils (line 4) | class Utils {
    method constructor (line 5) | constructor() {}
    method formatBytes (line 7) | formatBytes(a, b) {
    method bucketsToLabels (line 16) | bucketsToLabels(buckets) {
    method getKVObjSortedArray (line 29) | getKVObjSortedArray(obj, asc) {
    method getApiStatsArray (line 40) | getApiStatsArray(statsData) {
    method getMethodStatsArray (line 67) | getMethodStatsArray(statsData) {
    method getCurrentTimelineBucket (line 86) | getCurrentTimelineBucket(statsData) {
    method getSortedTimeline (line 97) | getSortedTimeline(statsData) {
Condensed preview — 85 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (632K chars).
[
  {
    "path": ".editorconfig",
    "chars": 415,
    "preview": "# EditorConfig helps developers define and maintain consistent\n# coding styles between different editors and IDEs\n# edit"
  },
  {
    "path": ".eslintignore",
    "chars": 31,
    "preview": "dist\nnode_modules\npublic\ntests\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 12,
    "preview": "github: sv2\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 1384,
    "preview": "name: CI\n\n# Controls when the action will run. Triggers the workflow on push or pull request\n# events but only for the m"
  },
  {
    "path": ".gitignore",
    "chars": 264,
    "preview": ".DS_Store\nnode_modules\n/dist\n/demo\n\n/tests/e2e/videos/\n/tests/e2e/screenshots/\n\n# local env files\n.env.local\n.env.*.loca"
  },
  {
    "path": ".prettierrc",
    "chars": 47,
    "preview": "{\n  \"singleQuote\": true,\n  \"printWidth\": 160\n}\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 630,
    "preview": "# Contributing \n\nWant to contribute to **dashblocks-template**? Awesome!\n\n\nThere are many ways you can contribute:\n\n* by"
  },
  {
    "path": "LICENSE",
    "chars": 1085,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2019-present slana.tech\n\nPermission is hereby granted, free of charge, to any perso"
  },
  {
    "path": "README.md",
    "chars": 2497,
    "preview": "<p align=\"center\">\n<img src=\"https://github.com/slanatech/dashblocks-template/blob/master/screenshots/dblogo.png?raw=tru"
  },
  {
    "path": "babel.config.js",
    "chars": 265,
    "preview": "module.exports = {\n  presets: ['@vue/cli-plugin-babel/preset'],\n  plugins: [\n    [\n      'transform-imports',\n      {\n  "
  },
  {
    "path": "cypress.json",
    "chars": 50,
    "preview": "{\n  \"pluginsFile\": \"tests/e2e/plugins/index.js\"\n}\n"
  },
  {
    "path": "package.json",
    "chars": 3190,
    "preview": "{\n  \"name\": \"dashblocks-template\",\n  \"version\": \"0.5.4\",\n  \"private\": true,\n  \"author\": \"https://github.com/sv2\",\n  \"scr"
  },
  {
    "path": "public/googleee01dc033d7bbca2.html",
    "chars": 53,
    "preview": "google-site-verification: googleee01dc033d7bbca2.html"
  },
  {
    "path": "public/index.html",
    "chars": 895,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE="
  },
  {
    "path": "scripts/demodeploy.sh",
    "chars": 239,
    "preview": "#!/bin/bash\n\n# abort on errors\nset -e\n\n# navigate into the build output directory\ncd demo\n\ngit init\ngit add -A\ngit commi"
  },
  {
    "path": "src/App.vue",
    "chars": 69,
    "preview": "<template>\n  <div id=\"app\">\n    <router-view />\n  </div>\n</template>\n"
  },
  {
    "path": "src/components/menu/menudrawer.vue",
    "chars": 2858,
    "preview": "<template>\n  <q-drawer\n    ref=\"drawer\"\n    show-if-above\n    :mini=\"miniState\"\n    v-model=\"shown\"\n    :side=\"side\"\n   "
  },
  {
    "path": "src/components/menu/menulist.vue",
    "chars": 1699,
    "preview": "<template>\n  <q-list class=\"db-menu-list\">\n    <div v-if=\"mode === 'expand'\">\n      <menu-list-item\n        v-for=\"item "
  },
  {
    "path": "src/components/menu/menulistitem.vue",
    "chars": 2667,
    "preview": "<template>\n  <q-expansion-item\n    v-if=\"item.items\"\n    :icon=\"item.icon\"\n    :label=\"item.title\"\n    :caption=\"item.ca"
  },
  {
    "path": "src/components/menu/menulistitemex.vue",
    "chars": 3310,
    "preview": "<template>\n  <div v-if=\"item.items\">\n    <q-item clickable v-ripple exact :class=\"itemClass\" :active-class=\"itemActiveCl"
  },
  {
    "path": "src/components/settings/colorschemeselector.vue",
    "chars": 3989,
    "preview": "<template>\n  <q-card style=\"width: 100%;\">\n    <q-card-section>\n      <q-input v-model=\"query\" debounce=\"400\" filled den"
  },
  {
    "path": "src/components/settings/settings.vue",
    "chars": 7693,
    "preview": "<template>\n  <div class=\"q-pa-md\" style=\"max-width: 350px\">\n    <q-bar class=\"bg-none\">\n      Settings\n      <q-space />"
  },
  {
    "path": "src/components/tables/htable.vue",
    "chars": 6308,
    "preview": "<template>\n  <q-table\n    dense\n    flat\n    :data=\"hits\"\n    :columns=\"columnsList\"\n    :pagination.sync=\"pagination\"\n "
  },
  {
    "path": "src/components/tables/itable.vue",
    "chars": 6168,
    "preview": "<template>\n  <q-table\n    dense\n    flat\n    virtual-scroll\n    :data=\"items\"\n    :columns=\"columns\"\n    :pagination.syn"
  },
  {
    "path": "src/components/tables/ptable.vue",
    "chars": 4716,
    "preview": "<template>\n  <q-table dense flat hide-bottom :data=\"items\" :columns=\"columns\" row-key=\"prop\" :pagination.sync=\"paginatio"
  },
  {
    "path": "src/components/user/message.vue",
    "chars": 1382,
    "preview": "<template>\n  <q-item>\n    <q-item-section avatar top>\n      <q-icon v-if=\"message.icon\" :name=\"message.icon || 'mdi-mess"
  },
  {
    "path": "src/components/user/messages.vue",
    "chars": 2000,
    "preview": "<template>\n  <div class=\"q-pa-md\" style=\"max-width: 700px\">\n    <q-bar class=\"bg-none\">\n      Notifications\n      <q-spa"
  },
  {
    "path": "src/components/user/userinfo.vue",
    "chars": 6429,
    "preview": "<template>\n  <div class=\"q-pa-md\" style=\"max-width: 280px\">\n    <q-list style=\"width: 260px\">\n      <q-item>\n        <q-"
  },
  {
    "path": "src/dashboards/ChartJsShowcase.json",
    "chars": 1449,
    "preview": "{\n  \"layout\": {\n    \"type\": \"grid\"\n  },\n  \"widgets\": [\n    {\n      \"id\": \"w1\",\n      \"type\": \"DbChartjsLine\",\n      \"csp"
  },
  {
    "path": "src/dashboards/dashfive.json",
    "chars": 3089,
    "preview": "{\n  \"layout\": {\n    \"type\": \"grid\"\n  },\n  \"widgets\": [\n    {\n      \"id\": \"wa\",\n      \"type\": \"DbDygraphsBar\",\n      \"csp"
  },
  {
    "path": "src/dashboards/dashfour.json",
    "chars": 930,
    "preview": "{\n  \"layout\": {\n    \"type\": \"grid\"\n  },\n  \"widgets\": [\n    {\n      \"id\": \"w0\",\n      \"type\": \"DbTrendLine\",\n      \"cspan"
  },
  {
    "path": "src/dashboards/dashsix.json",
    "chars": 1522,
    "preview": "{\n  \"layout\": {\n    \"type\": \"grid\"\n  },\n  \"widgets\": [\n    {\n      \"id\": \"w1\",\n      \"type\": \"DbDygraphsBar\",\n      \"csp"
  },
  {
    "path": "src/dashboards/dashthree.json",
    "chars": 136,
    "preview": "{\n  \"layout\": {\n    \"type\": \"grid\"\n  },\n  \"widgets\": [\n    {\n      \"id\": \"w1\",\n      \"type\": \"DbHorizon\",\n      \"cspan\":"
  },
  {
    "path": "src/data/ChartJsShowcase.json",
    "chars": 1449,
    "preview": "{\n  \"layout\": {\n    \"type\": \"grid\"\n  },\n  \"widgets\": [\n    {\n      \"id\": \"w1\",\n      \"type\": \"DbChartjsLine\",\n      \"csp"
  },
  {
    "path": "src/data/api.json",
    "chars": 25061,
    "preview": "{\n  \"startts\": 1588045302159,\n  \"all\": {\n    \"requests\": 2465,\n    \"responses\": 2465,\n    \"errors\": 286,\n    \"info\": 0,\n"
  },
  {
    "path": "src/data/apioperation.json",
    "chars": 4971,
    "preview": "{\n  \"startts\": 1588045302159,\n  \"all\": {\n    \"requests\": 55827,\n    \"responses\": 55827,\n    \"errors\": 5998,\n    \"info\": "
  },
  {
    "path": "src/data/errors.json",
    "chars": 60742,
    "preview": "{\n  \"startts\": 1588092850475,\n  \"all\": {\n    \"requests\": 13204,\n    \"responses\": 13204,\n    \"errors\": 1402,\n    \"info\": "
  },
  {
    "path": "src/data/hitsdata.json",
    "chars": 112727,
    "preview": "[\n  {\n    \"path\": \"/pets\",\n    \"method\": \"GET\",\n    \"query\": \"GET /pets\",\n    \"startts\": 1591661376075,\n    \"endts\": 159"
  },
  {
    "path": "src/data/iconsmdiv5.json",
    "chars": 102207,
    "preview": "[\n  \"ab-testing\",\n  \"abjad-arabic\",\n  \"abjad-hebrew\",\n  \"abugida-devanagari\",\n  \"abugida-thai\",\n  \"access-point\",\n  \"acc"
  },
  {
    "path": "src/data/itemstabledata.json",
    "chars": 640,
    "preview": "[\n  {\n    \"name\": \"api_all_client_error_total\",\n    \"color\": \"#4e79a7\",\n    \"data\": 10\n  },\n  {\n    \"name\": \"api_all_err"
  },
  {
    "path": "src/data/ptabledata.json",
    "chars": 402,
    "preview": "{\n  \"layout\": {\n    \"type\": \"grid\"\n  },\n  \"widgets\": [\n    {\n      \"id\": \"w1\",\n      \"type\": \"DbChartjsLine\",\n      \"csp"
  },
  {
    "path": "src/data/requests.json",
    "chars": 4119,
    "preview": "{\n  \"startts\": 1588042628346,\n  \"all\": {\n    \"requests\": 2070,\n    \"responses\": 2070,\n    \"errors\": 257,\n    \"info\": 0,\n"
  },
  {
    "path": "src/data/summary.json",
    "chars": 61723,
    "preview": "{\n  \"startts\": 1588035881728,\n  \"all\": {\n    \"requests\": 585,\n    \"responses\": 583,\n    \"errors\": 64,\n    \"info\": 0,\n   "
  },
  {
    "path": "src/layouts/mainlayout.vue",
    "chars": 10239,
    "preview": "<template>\n  <q-layout view=\"hHh LpR fFf\">\n    <q-header class=\"text-grey-4 db-toolbar\" height-hint=\"98\">\n      <q-toolb"
  },
  {
    "path": "src/main.js",
    "chars": 1597,
    "preview": "import Vue from 'vue';\nimport App from './App.vue';\nimport router from './router';\nimport store from './store/store';\nim"
  },
  {
    "path": "src/mixins/demodashboard.js",
    "chars": 387,
    "preview": "import { mapState } from 'vuex';\n\nexport const demodashboard = {\n  computed: {\n    ...mapState({\n      dark: state => st"
  },
  {
    "path": "src/mixins/vgtmethods.js",
    "chars": 795,
    "preview": "// Standard methods for views that use vue-good-table\nexport const vgtMethods = {\n  methods: {\n    formatToFixed2: funct"
  },
  {
    "path": "src/pages/login.vue",
    "chars": 2630,
    "preview": "<template>\n  <q-layout>\n    <q-page-container>\n      <q-page class=\"flex flex-center\">\n        <q-card class=\"ub-login-c"
  },
  {
    "path": "src/quasar.js",
    "chars": 2295,
    "preview": "import Vue from 'vue';\n\nimport './styles/quasar.scss';\nimport '@quasar/extras/roboto-font/roboto-font.css';\nimport '@qua"
  },
  {
    "path": "src/router.js",
    "chars": 2882,
    "preview": "import Vue from 'vue';\nimport Router from 'vue-router';\nimport MainLayout from './layouts/mainlayout.vue';\nimport Home f"
  },
  {
    "path": "src/store/modules/layout.js",
    "chars": 1575,
    "preview": "/*\n * Layout state Vuex Module\n */\n\n//import { dbColors } from 'dashblocks';\n\nconst state = {\n  dark: (localStorage['ub-"
  },
  {
    "path": "src/store/store.js",
    "chars": 212,
    "preview": "import Vue from 'vue';\nimport Vuex from 'vuex';\nimport layout from './modules/layout';\nVue.use(Vuex);\n\nexport default ne"
  },
  {
    "path": "src/styles/quasar.scss",
    "chars": 1656,
    "preview": "@import './quasar.variables.scss';\n@import '~quasar-styl';\n// @import '~quasar-addon-styl'\n\n// ???\n//@import 'dashblocks"
  },
  {
    "path": "src/styles/quasar.variables.scss",
    "chars": 303,
    "preview": "// It's highly recommended to change the default colors\n// to match your app's branding.\n\n$primary   : #027BE3;\n$seconda"
  },
  {
    "path": "src/styles/textbgcolors.scss",
    "chars": 83,
    "preview": "/* Various text and bg colors */\n\n.text-down1 {\n  color: rgba(128,128,128,0.7);\n}\n\n"
  },
  {
    "path": "src/styles/ubbox.scss",
    "chars": 320,
    "preview": "/** UB Flex Box */\n.ub-box {\n  display: flex;\n  flex-flow: column;\n  flex-shrink: 0;\n\n  .ub-row {\n    border: 0px;\n  }\n\n"
  },
  {
    "path": "src/styles/ubcode.scss",
    "chars": 597,
    "preview": "/* UBook - code highlighting styles */\n\n.ub-code {\n  font: 14px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'so"
  },
  {
    "path": "src/styles/vgt.scss",
    "chars": 520,
    "preview": "/* vue-good-table styles */\n\ntable.vgt-table.sws-table {\n  font-size: 14px;\n}\n\ntable.vgt-table.sws-table.nocturnal {\n  b"
  },
  {
    "path": "src/utils.js",
    "chars": 3191,
    "preview": "// Utilities\nimport pathOr from 'ramda/src/pathOr';\n\nclass Utils {\n  constructor() {}\n\n  formatBytes(a, b) {\n    if (0 ="
  },
  {
    "path": "src/views/About.vue",
    "chars": 147,
    "preview": "<template>\n  <q-page padding>\n    <p>This is an about page</p>\n  </q-page>\n</template>\n\n<script>\nexport default {\n  name"
  },
  {
    "path": "src/views/ChartJsShowcase.vue",
    "chars": 7644,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-12 q-ma-sm\">\n        <"
  },
  {
    "path": "src/views/DashblocksShowcase.vue",
    "chars": 7847,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <db-dashboard v-if=\"ready\" :dbspec=\"dbspec\" :dbdata=\"dbdata\" :dark=\"dark\"> </d"
  },
  {
    "path": "src/views/Dygraphs.vue",
    "chars": 3584,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-12 q-ma-sm\">\n        <"
  },
  {
    "path": "src/views/Home.vue",
    "chars": 202,
    "preview": "<template>\n  <q-page class=\"flex flex-center\">\n    <img alt=\"Quasar logo\" src=\"../assets/logo.png\" />\n  </q-page>\n</temp"
  },
  {
    "path": "src/views/SampleDashboard.vue",
    "chars": 3247,
    "preview": "<template>\n  <db-dashboard v-if=\"ready\" :dbspec=\"dbspec\" :dbdata=\"dbdata\" :dark=\"isDark\"> </db-dashboard>\n</template>\n\n<"
  },
  {
    "path": "src/views/apiop.vue",
    "chars": 13273,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\" style=\"margin-bottom: 10px;\">\n      <div class=\""
  },
  {
    "path": "src/views/errors.vue",
    "chars": 8193,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\" style=\"margin-bottom: 10px;\">\n      <div class=\""
  },
  {
    "path": "src/views/forms.vue",
    "chars": 2811,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-10 offset-md-1 q-ma-lg"
  },
  {
    "path": "src/views/materialicons.vue",
    "chars": 764,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-10 offset-md-1 q-ma-lg"
  },
  {
    "path": "src/views/mdi.vue",
    "chars": 2976,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-10 offset-md-1 q-ma-lg"
  },
  {
    "path": "src/views/observability.vue",
    "chars": 697,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-10 offset-md-1 q-ma-lg"
  },
  {
    "path": "src/views/quasartable.vue",
    "chars": 3563,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-12 q-ma-sm\">\n        <"
  },
  {
    "path": "src/views/requests.vue",
    "chars": 9453,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\" style=\"margin-bottom: 10px;\">\n      <div class=\""
  },
  {
    "path": "src/views/summary.vue",
    "chars": 9774,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\" style=\"margin-bottom: 10px;\">\n      <div class=\""
  },
  {
    "path": "src/views/tables.vue",
    "chars": 672,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-10 offset-md-1 q-ma-lg"
  },
  {
    "path": "src/views/timeline.vue",
    "chars": 5458,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-12 q-ma-xs\">\n        <"
  },
  {
    "path": "src/views/typography.vue",
    "chars": 5826,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-10 offset-md-1 q-ma-lg"
  },
  {
    "path": "src/views/vuegoodtable.vue",
    "chars": 6368,
    "preview": "<template>\n  <q-page class=\"ub-page\">\n    <div class=\"row items-center\">\n      <div class=\"col-md-12 q-ma-sm\">\n        <"
  },
  {
    "path": "tests/e2e/.eslintrc.js",
    "chars": 138,
    "preview": "module.exports = {\n  plugins: [\"cypress\"],\n  env: {\n    mocha: true,\n    \"cypress/globals\": true\n  },\n  rules: {\n    str"
  },
  {
    "path": "tests/e2e/plugins/index.js",
    "chars": 885,
    "preview": "// https://docs.cypress.io/guides/guides/plugins-guide.html\n\n// if you need a custom webpack configuration you can uncom"
  },
  {
    "path": "tests/e2e/specs/test.js",
    "chars": 157,
    "preview": "// https://docs.cypress.io/api/introduction/api.html\n\ndescribe('My First Test', () => {\n  it('Visits the app root url', "
  },
  {
    "path": "tests/e2e/support/commands.js",
    "chars": 841,
    "preview": "// ***********************************************\n// This example commands.js shows you how to\n// create various custom"
  },
  {
    "path": "tests/e2e/support/index.js",
    "chars": 671,
    "preview": "// ***********************************************************\n// This example support/index.js is processed and\n// load"
  },
  {
    "path": "tests/unit/.eslintrc.js",
    "chars": 50,
    "preview": "module.exports = {\n  env: {\n    jest: true\n  }\n};\n"
  },
  {
    "path": "vue.config.js",
    "chars": 576,
    "preview": "// vue.config.js\nconst webpack = require('webpack');\nconst BundleAnalyzerPlugin = require('webpack-bundle-analyzer').Bun"
  }
]

About this extraction

This page contains the full source code of the slanatech/dashblocks-template GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 85 files (553.3 KB), approximately 171.0k tokens, and a symbol index with 23 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!