{"id":13490625,"url":"https://github.com/koron/nvgd","last_synced_at":"2025-04-30T06:28:22.006Z","repository":{"id":25038009,"uuid":"28457713","full_name":"koron/nvgd","owner":"koron","description":"Filterable (grep, head and tail) HTTP file server","archived":false,"fork":false,"pushed_at":"2025-04-28T14:05:51.000Z","size":3177,"stargazers_count":17,"open_issues_count":3,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-28T14:38:45.178Z","etag":null,"topics":["go","golang"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/koron.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2014-12-24T17:45:38.000Z","updated_at":"2025-04-28T14:05:55.000Z","dependencies_parsed_at":"2023-12-21T06:42:48.868Z","dependency_job_id":"9885eb9f-93fc-4cb2-beb5-65a63f4e7b17","html_url":"https://github.com/koron/nvgd","commit_stats":null,"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koron%2Fnvgd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koron%2Fnvgd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koron%2Fnvgd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koron%2Fnvgd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/koron","download_url":"https://codeload.github.com/koron/nvgd/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251653503,"owners_count":21622139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","golang"],"created_at":"2024-07-31T19:00:49.581Z","updated_at":"2025-04-30T06:28:21.993Z","avatar_url":"https://github.com/koron.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# NVGD - Night Vision Goggles Daemon\n\nHTTP file server to help DevOps.\n\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/koron/nvgd)](https://pkg.go.dev/github.com/koron/nvgd)\n[![Actions/Go](https://github.com/koron/nvgd/workflows/Go/badge.svg)](https://github.com/koron/nvgd/actions?query=workflow%3AGo)\n[![Go Report Card](https://goreportcard.com/badge/github.com/koron/nvgd)](https://goreportcard.com/report/github.com/koron/nvgd)\n\nNVGD (Night Vision Goggles Daemon) is an HTTP file server designed to help\nDevOps professionals access and transform data from various sources.  It\nprovides a unified interface to retrieve data from local files, databases, AWS\nS3, Redis, and other sources, then apply transformations like filtering,\nformatting, and visualization before serving the results to clients.\n\nIndex:\n\n* [How to use](#how-to-use)\n* [Acceptable path](#acceptable-path)\n    * [Protocols](#protocols)\n* [Configuration file](#configuration-file)\n    * [File Protocol Handler](#file-protocol-handler)\n    * [Command Protocol Handlers](#command-protocol-handlers)\n    * [S3 Protocol Handlers](#config-s3-protocol-handlers)\n    * [Config DB Protocol Handler](#config-db-protocol-handler)\n    * [Configure filters](#configure-filters)\n    * [Default Filters](#default-filters)\n* [Filters](#filters)\n* [Prefix Aliases](#prefix-aliases)\n\n## How to use\n\nDownload an archive file which matches to your environment from [latest\nrelease](https://github.com/koron/nvgd/releases/latest).\n\nExtract an executable `nvgd` or `nvgd.exe` from the archive file.  Then copy it\nto one of directory in PATH environment variable. (ex. `/usr/local/bin`)\n\nRun:\n\n    $ nvgd\n\nAccess:\n\n    $ curl http://127.0.0.1:9280/file:///var/log/message/httpd.log?tail=limit:25\n\nNOTE: Pre-compiled binary for Linux is built with newer glibc. So it can't be\nrun on Linux with old glibc, like CentOS 7 or so.  In that case, you must\ncompile nvgd by your self. Please check next section to build from source.\n\n### Build from source\n\nRequirements to build:\n\n* Go 1.23.0 or above (1.24.2 is recommended)\n    * CGO enabled\n\nHow to install or upgrade\n\n```console\n$ go install github.com/koron/nvgd@latest\n```\n\nSee also: [How to build on CentOS 7](doc/build-centos7.md)\n\n## Acceptable path\n\nNvgd accepts path in these like format:\n\n    /{protocol}://{args/for/protocol}[?{filters}]\n\n### Protocols\n\nNvgd supports these `protocol`s:\n\n* `file` - `/file:///path/to/source`\n    * support [glob][globspec] like `*`\n\n        ```\n        /files:///var/log/access*.log\n        ```\n\n* `command` - result of pre-defined commands\n* `s3obj`\n    * get object: `/s3obj://bucket-name/key/to/object`\n* `s3list`\n    * list common prefixes and objects: `/s3list://bucket-name/prefix/of/key`\n* `db` - query pre-defined databases\n    * query `id` and `email` form users in `db_pq`:\n\n        ```\n        /db://db_pq/select id,email from users\n        ```\n\n    * support multiple databases:\n\n        ```\n        /db://db_pq2/foo/select id,email from users\n        /db://db_pq2/bar/select id,email from users\n        ```\n\n        This searches from `foo` and `bar` databases.\n\n    * show query form for `db_pq`:\n\n        ```\n        /db://db_pq/\n        ```\n\n* `db-dump` - dump tables to XLSX.\n\n    ```console\n    curl http://127.0.0.1:9280/db-dump://mysql/ -o dst.xlsx\n    ```\n\n    Or access `http://127.0.0.1:9280/db-dump://mysql/` by web browser.\n    Then start to download a excel file.\n\n* `db-restore` - restore (clear all and import) tables from XLSX.\n\n    ```console\n    curl http://127.0.0.1:9280/db-restore://mysql/ -X POST \\\n      -H 'Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' \\\n      --data-binary @src.xlsx\n    ```\n\n    Or access `http://127.0.0.1:9280/db-dump://mysql/` by web browser.\n    You can upload a excel file from the form.\n\n* `db-update` - update tables by XLSX (upsert)\n\n    ```console\n    curl http://127.0.0.1:9280/db-update://mysql/ -X POST \\\n      -H 'Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' \\\n      --data-binary @src.xlsx\n    ```\n\n    Or access `http://127.0.0.1:9280/db-dump://mysql/` by web browser.\n    You can upload a excel file from the form.\n\n* `redis` - access to redis.\n\n    [See document for details](doc/protocol-redis.md).\n\n* `trdsql` - TRDSQL query editor\n\n    [See docuemnt for detail](doc/filter-trdsql.md).\n\n* `echarts` - ECharts query editor\n\n    [See docuemnt for detail](doc/filter-echarts.md).\n\n* `examples` - Example files to use demo/document of filters\n\n* `config` - current nvgd's configuration\n\n    `/config://` or `/config/` (alias)\n\n* `help` - show help (README.md) of nvgd.\n\n    `/help://` or `/help/` (alias)\n\n    It would be better that combining with `markdown` filter.\n\n    ```\n    /help/?markdown\n    ```\n\n* `version` - show nvgd's version\n\n    Path is `/version://` or `/version/` (alias)\n\nSee also:\n\n* [Filters](#filters)\n\n\n## Configuration file\n\nNvgd takes a configuration file in YAML format.  A file `nvgd.conf.yml` in\ncurrent directory or given file with `-c` option is loaded at start.\n\n`nvgd.conf.yml` consist from these parts:\n\n```yml\n# Listen IP address and port (OPTIONAL, default is \"127.0.0.1:9280\")\naddr: \"0.0.0.0:8080\"\n\n# Path prefix for absolute links, use for sub-path multiple tenancy\npath_prefix: /tenant_name/\n\n# Destination (path or keyword) for error log, default is `(stderr)`\nerror_log: (stderr)\n\n# Destination (path or keyword) for access log, default is `(discard)`\naccess_log: (stdout)\n\n# File which served as \"/\" root.\nroot_contents_file: \"/opt/nvgd/index.html\"\n\n# Configuration for protocols (OPTIONAL)\nprotocols:\n\n  # File protocol handler's configuration.\n  file:\n    ...\n\n  # Pre-defined command handlers.\n  command:\n    ...\n\n  # AWS S3 protocol handler configuration (see other section, OPTIONAL).\n  s3:\n    ...\n\n  # DB protocol handler configuration (OPTIONAL, see below)\n  db:\n    ...\n\n# Configuration for each filters (OPTIONAL)\n\n  indexhtml:\n    ...\n\n  htmltable:\n    ...\n\n  markdown:\n    ...\n\n# Default filters: pair of path prefix and filter description.\ndefault_filters:\n  ...\n\n# Custom prefix aliases, see later \"Prefix Aliases\" section.\naliases:\n  ...\n\n# Enable \"Cross-Origin Resource Sharing\" (CORS).\n# This value is put with \"Access-Control-Allow-Origin\" header in responses.\naccess_control_allow_origin: \"*\"\n```\n\n### File Protocol Handler\n\nExample:\n\n```yaml\nfile:\n  locations:\n    - '/var/log/'\n    - '/etc/'\n\n  forbiddens:\n    - '/etc/ssh'\n    - '/etc/passwd'\n\n  use_unixtime: true\n```\n\nThis configuration has `locations`, `forbiddens` properties.  These props\ndefine accessible area of file system.\n\nWhen paths are given as `locations`, only those paths are permitted to access,\nothers are forbidden.  Otherwise, all paths are accessible.\n\nWhen `forbiddens` are given, those paths can't be accessed even if it is under\npath in `locations`.\n\nIf the value of `use_unixtime` property is set to true, UNIX time will be used\ninstead of RFC1123 for all time expressions: `modified_at` or so.\n\n\n### Command Protocol Handlers\n\nConfiguration of pre-defined command protocol handler maps a key to\ncorresponding command source.\n\nExample:\n\n```yml\ncommand:\n  \"df\": \"df -h\"\n  \"lstmp\": \"ls -l /tmp\"\n```\n\nThis enables two resources under `command` protocol.\n\n* `/command://df`\n* `/command://lstmp`\n\nYou could add filters of course, like: `/command://df?grep=re:foo`\n\n### Config S3 Protocol Handlers\n\nConfiguration of S3 protocor handlers consist from 2 parts: `default` and\n`buckets`.  `default` part cotains default configuration to connect S3.  And\n`buckets` part could contain configuration for each buckets specific.\n\n```yml\ns3:\n\n  # IANA timezone to show times (optional).  \"Asia/Tokyo\" for JST.\n  timezone: Asia/Tokyo\n\n  # default configuration to connect to S3 (REQUIRED for S3)\n  default:\n\n    # Access key ID for S3 (REQUIRED)\n    access_key_id: xxxxxxxxxxxxxxxxxxxx\n\n    # Secret access key (REQUIRED)\n    secret_access_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n    # Access point to connect (OPTIONAL, default is \"ap-northeast-1\")\n    region: ap-northeast-1\n\n    # Session token to connect (OPTIONAL, default is empty: not used)\n    session_token: xxxxxxx\n\n    # MaxKeys for S3 object listing. valid between 1 to 1000.\n    # (OPTIONAL, default is 1000)\n    max_keys: 10\n\n    # HTTP PROXY to access S3. (OPTIONAL, default is empty: direct access)\n    http_proxy: \"http://your.proxy:port\"\n\n  # bucket specific configurations (OPTIONAL)\n  buckets:\n\n    # bucket name can be specified as key.\n    \"your_bucket_name1\":\n      # same properties with \"default\" can be placed at here.\n\n    # other buckets can be added here.\n    \"your_bucket_name2\":\n      ...\n\n  # UNIX time will be used instead of RFC1123 for all time expression:\n  # `modified_at` or so. (OPTIONAL)\n  use_unixtime: true\n```\n\n### Config DB Protocol Handler\n\nSample of configuration for DB protocol handler.\n\n```yml\ndb:\n  # key could be set favorite name for your database\n  db_pq:\n    # driver supports 'postgres' or 'mysql' for now\n    driver: 'postgres'\n    # name is driver-specific source name (DSN)\n    name: 'postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full'\n    # limit number of rows for a query (default: 100)\n    max_rows: 50\n\n  # sample of connecting to MySQL\n  db_mysql:\n    driver: 'mysql'\n    name:   'user:password@/dbname'\n```\n\nWith above configuration, you will be able to access those databases with below URLs or commands.\n\n  * `curl 'http://127.0.0.1:9280/db://db_pq/select%20email%20from%20users'`\n  * `curl 'http://127.0.0.1:9280/db://db_mysql/select%20email%20from%20users'`\n\n#### MySQL: TRADITIONAL mode\n\nTo restore or update MySQL database with `db-restore` or `db-update` protocol,\nwe recommend to use TRADITIONAL mode to make MySQL checks types strictly.  You\nshould add `?sql_mode=TRADITIONAL` to connection URL to enabling it.\n\nExample:\n\n```yaml\n  db:\n    mysql1:\n      driver: mysql\n      name: \"mysql:abcd1234@tcp(127.0.0.1:3306)/mysql?sql_mode=TRADITIONAL\"\n```\n\n#### Multiple Databases in an instance\n\nTo make DB protocol handler connect with multiple databases in an instance,\nthere are 3 steps to make it enable.\n\n1.  Add `multiple_database: true` property to DB configuration.\n2.  Add `{{.dbname}}` placeholder in value of `name`.\n3.  Access to URL `/db://DBNAME@db_pq/you query`.\n\n    DBNAME is used to expand `{{.dbname}}` in above.\n\nAs a result, your configuration would be like this:\n\n```yml\ndb:\n  db_pq:\n    driver: 'postgres'\n    name: 'postgres://pqgotest:password@localhost/{{.dbname}}?sslmode=verify-full'\n    multiple_database: true\n\n  # sample of connecting to MySQL\n  db_mysql:\n    driver: 'mysql'\n    name:   'user:password@/{{.dbname}}'\n    multiple_database: true\n```\n\n### Configure filters\n\nSome filters can be configured by `filters` section.\n\n* `custom_css_urls`: Array of string. Specify external CSS's URL for each string.\n\n    Supported filters: htmltable, indexhtml, markdown\n\n    Example: markdown filter outputs two `link` elements to including external CSS.\n    indexhtml filters outputs a `link` elements for CSS.\n\n    ```yaml\n    filters:\n      markdown:\n        custom_css_urls:\n        - https://www.kaoriya.net/assets/css/contents.css\n        - https://www.kaoriya.net/assets/css/syntax.css\n\n      indexhtml:\n        custom_css_urls:\n        - https://www.kaoriya.net/assets/css/contents.css\n    ```\n\n### Default Filters\n\nDefault filters provide a capability to apply implicit filters depending on\npath prefixes. See [Filters](#filters) for detail of filters.\n\nTo apply `tail` filter for under `/file:///var/log/` path:\n\n```yaml\ndefault_filters:\n  \"file:///var/log/\":\n    - \"tail\"\n```\n\nIf you want to show last 100 lines, change like this:\n\n```yaml\ndefault_filters:\n  \"file:///var/log/\":\n    - \"tail=limit:100\"\n```\n\nYou can specify different filters for paths.\n\n```yaml\ndefault_filters:\n  \"file:///var/log/\":\n    - \"tail\"\n  \"file:///tmp/\":\n    - \"head\"\n```\n\nDefault filters can be ignored separately by [all (pseudo) filter](#all-pseudo-filter).\n\nDefault filters are ignored for directories source of file protocols.\n\n\n## Filters\n\nNvgd supports these filters:\n\n* [Grep filter](#grep-filter)\n* [Head filter](#head-filter)\n* [Tail filter](#tail-filter)\n* [Cut filter](#cut-filter)\n* [Pager filter](#pager-filter)\n* [Hash filter](#hash-filter)\n* [LTSV filter](#ltsv-filter)\n* [JSONArray filter](#jsonarray-filter)\n* [Index HTML filter](#index-html-filter)\n* [HTML Table filter](#html-table-filter)\n* [Text Table filter](#text-table-filter)\n* [Markdown filter](#markdown-filter)\n* [Refresh filter](#refresh-filter)\n* [Download filter](#download-filter)\n* [TRDSQL filter](#trdsql-filter)\n* [Echarts filter](#echarts-filter)\n* [All (pseudo) filter](#all-pseudo-filter)\n\n### Filter Spec\n\nWhere `{filters}` is:\n\n    {filter}[\u0026{filter}...]\n\nWhere `{filter}` is:\n\n    {filter_name}[={options}]\n\nWhere `{options}` is:\n\n    {option_name}:{value}[;{option_name}:{value}...]\n\nSee other section for detail of each filters.\n\nExample: get last 50 lines except empty lines.\n\n    /file:///var/log/messages?grep=re:^$;match:false\u0026tail=limit:50\n\n### Grep filter\n\nOutput lines which matches against regular expression.\n\nAs default, matching is made for whole line.  But when valid option `field` is\ngiven, then matching is made for specified a field, which is splitted by\n`delim` character.\n\n`grep` command equivalent.\n\n* filter\\_name: `grep`\n* options\n    * `re` - regular expression used for match.\n    * `match` - output when match or not match.  default is true.\n    * `field` - a match target N'th field counted from 1.\n        default is none (whole line).\n    * `delim` - field delimiter string (default: TAB character).\n    * `context` - show a few lines before and after the matched line.\n        default is `0` (no contexts).\n    * `number` - prefix each line of output with the 1-based line number.\n        when `true`\n\n### Head filter\n\nOutput the first N lines.\n\n`head` command equivalent.\n\n* filter\\_name: `head`\n* options\n    * `start` - start line number for output.  default is 0.\n    * `limit` - line number for output.  default is 10.\n\n### Tail filter\n\nOutput the last N lines.\n\n`tail` command equivalent.\n\n* filter\\_name: `tail`\n* options\n    * `limit` - line number for output.  default is 10.\n\n### Cut filter\n\nOutput selected fields of lines.\n\n`cut` command equivalent.\n\n* filter\\_name: `cut`\n* options:\n    * `delim` - field delimiter string (default: TAB character).\n    * `white` - use consecutive whites as one single field separator (default: false)\n    * `list` - selected fields, combinable by comma `,`.\n        * `N` - N'th field counted from 1.\n        * `N-M` - from N'th, to M'th field (included).\n        * `N-` - from N'th field, to end of line.\n        * `-N` - from first, to N'th field.\n\n### Pager filter\n\n`pager` is a filter that divides the input stream into pages by lines that\nmatch the specified pattern.\n\n* filter\\_name: `pager`\n* options:\n    * `eop`: Regular expression that matches page separator lines.\n    * `pages`: Page number to output (1-based number)\n\n        You can specify multiple pages separated by commas. Examples\n\n        * `1`: First page only\n        * `2,4,6`: Page 2, 4, and 6\n        * `-1`: Last page\n        * `-3`: 3rd page from the end\n        * `1,-1`: First and last pages\n        * `10-12`: Pages 10 to 12\n\n    * `num`: Boolean. Output a page number at the top of the page.\n\n      Example: `(page 12)`\n\n### Hash filter\n\nOutput hash value.\n\n* filter\\_name: `hash`\n* options:\n    * `algorithm` - one of `md5` (default), `sha1`, `sha256` or `sha512`\n    * `encoding` - one of `hex` (default), `base64` or `binary`\n\n### Count filter\n\nCount lines.\n\n* filter\\_name: `count`\n* options: (none)\n\n### LTSV filter\n\nA filter that outputs only the specified labels from the rows of LTSV that\nmatch the another specified label value.\n\n* filter\\_name: `ltsv`\n* options:\n    * `grep` - match parameter: `{label},{pattern}`\n    * `match` - output when match or not match.  default is true.\n    * `cut` - selected labels, combinable by comma `,`.\n\n### JSONArray filter\n\nConvert each line as a string of JSON array.\n\n* filter\\_name: `jsonarray`\n* options: (none)\n\n### Index HTML filter\n\nConvert LTSV to Index HTML.\n(limited for s3list and files (dir) source for now)\n\n* filter\\_name: `indexhtml`\n* options:\n    * `timefmt`: Time layout for \"Modified At\" or so. default is `RFC1123`.\n      Possible values are, case insensitive: `ANSIC`, `UNIX`, `RUBY`, `RFC822`,\n      `RFC822Z`, `RFC850`, `RFC1123`, `RFC1123Z`, `RFC3339`, `RFC3339NANO`,\n      `STAMP`, and `DATETIME`\n    * `nouplink`: Hide the \"Up\" link to navigate back through the directory\n      hierarchy, when its value is `true`. Default is `false`: show the \"Up\"\n      link.\n* configurations:\n    * `custom_css_urls`: list of URLs to link as CSS.\n\nExample: list objects in S3 bucket \"foo\" with Index HTML.\n\n    http://127.0.0.1:9280/s3list://foo/?indexhtml\n\nThis filter should be the last of filters.\n\n### HTML Table filter\n\nConvert LTSV to HTML table.\n\n* filter\\_name: `htmltable`\n* options:\n    * `linefeed` - boolean: expand all `\\n` as linefeed.\n* configurations:\n    * `custom_css_urls`: list of URLs to link as CSS.\n\nExample: query id and email column from users table on mine database.\n\n    http://127.0.0.1:9280/db://mine/select%20id,email%20from%20users?htmltable\n\nThis filter should be the last of filters.\n\n### Text Table filter\n\nConvert LTSV to plain text table.\n\n* filter\\_name: `texttable`\n* options: (none)\n\nExample: query id and email column from users table on mine database.\n\n    http://127.0.0.1:9280/db://mine/select%20id,email%20from%20users?texttable\n\nAbove query generate this table.\n\n    +-----+-----------------------+\n    |  id |        email          |\n    +-----+-----------------------+\n    |    0|foo@example.com        |\n    |    1|bar@example.com        |\n    +-----+-----------------------+\n\nThis filter should be the last of filters.\n\n### Markdown filter\n\nConvert markdown text to HTML.\n\n* filter\\_name: `markdown`\n* options: (none)\n* configurations:\n    * `custom_css_urls`: list of URLs to link as CSS.\n\nExample: show help in HTML.\n\n    http://127.0.0.1:9280/help://?markdown\n    http://127.0.0.1:9280/help/?markdown\n\n### Refresh filter\n\nAdd \"Refresh\" header with specified time (sec).\n\n* filter\\_name: `refresh`\n* options: interval seconds to refresh.  0 for disable.\n\nExample: Open below URL using WEB browser, it refresh in each 5 seconds\nautomatically.\n\n    http://127.0.0.1:9280/file:///var/log/messages?tail\u0026refresh=5\n\n### Download filter\n\nAdd \"Content-Disposition: attachment\" header to the response.  It make the\nbrowser to download the resource instead of showing in it.\n\n* filter\\_name: `download`\n* options: (none)\n\nExample: download the file \"messages\" and would be saved as file.\n\n    http://127.0.0.1:9280/file:///var/log/messages?download\n\n### TRDSQL filter\n\nTRDSQL filter provides SQL on CSV.\n[See docuemnt for detail](doc/filter-trdsql.md).\n\n### Echarts filter\n\nEcharts filter provides drawing charts feature.\n[See docuemnt for detail](doc/filter-echarts.md).\n\n### All (pseudo) filter\n\nIgnore [default filters](#default-filters)\n\n* filter\\_name: `all`\n* options: (none)\n\nExample: if specified some default filters for `file:///var/`, this ignore\nthose.\n\n    http://127.0.0.1:9280/file:///var/log/messages?all\n\n\n## Prefix Aliases\n\nnvgd supports prefix aliases to keep compatibilities with [koron/night][night].\nCurrently these aliases are registered.\n\n* `files/` -\u003e `file:///`\n* `commands/` -\u003e `command://`\n* `config/` -\u003e `config://`\n* `help/` -\u003e `help://`\n* `trdsql/` -\u003e `trdsql:///`\n* `echarts/` -\u003e `echats:///`\n* `version/` -\u003e `version://`\n\nFor example this URL:\n\n    http://127.0.0.1:9280/files/var/log/messages\n\nIt works same as below URL:\n\n    http://127.0.0.1:9280/file:///var/log/messages\n\n### Custom prefix aliases\n\nYou can add custom prefix aliases with `aliases` section in `nvgd.conf.yml`.\n\nFor example with below settings...\n\n```yaml\naliases:\n  'dump/': 'db-dump://'\n```\n\nYou can dump a \"mytable\" table in \"mydb\" RDBMS with this URL:\n\n    http://127.0.0.1:9280/dump/mydb/mytable\n\nInstead of this:\n\n    http://127.0.0.1:9280/db-dump://mydb/mytable\n\nCustom prefix aliases can be used to avoid to containing `://` sub string in\npath.\n\n\n## References\n\n* [koron/night][night] previous implementation which written in NodeJS.\n\n[night]:https://github.com/koron/night\n[globspec]:https://golang.org/pkg/path/filepath/#Match\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoron%2Fnvgd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkoron%2Fnvgd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoron%2Fnvgd/lists"}