├── .config ├── .eslintrc ├── .prettierrc.js ├── Dockerfile ├── README.md ├── jest-setup.js ├── jest.config.js ├── jest │ ├── mocks │ │ └── react-inlinesvg.tsx │ └── utils.js ├── storybook │ ├── main.ts │ └── preview.ts ├── tsconfig.json ├── types │ └── custom.d.ts └── webpack │ ├── constants.ts │ ├── utils.ts │ └── webpack.config.ts ├── .eslintrc ├── .github └── workflows │ ├── ci.yml │ ├── is-compatible.yml │ └── release.yml ├── .gitignore ├── .nvmrc ├── .prettierrc.js ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── LICENSING.md ├── Magefile.go ├── NOTICE.md ├── README.md ├── build_and_start.sh ├── cypress.json ├── cypress └── integration │ └── 01-smoke.spec.ts ├── docker-compose.yaml ├── go.mod ├── go.sum ├── grafana ├── grafana.ini └── storage │ ├── alerting │ └── 1 │ │ └── __default__.tmpl │ └── storage │ └── storage.json ├── jest-setup.js ├── jest.config.js ├── package-lock.json ├── package.json ├── pkg ├── main.go ├── quickwit │ ├── client │ │ ├── client.go │ │ ├── client_test.go │ │ ├── models.go │ │ ├── search_request.go │ │ └── search_request_test.go │ ├── data_query.go │ ├── data_query_test.go │ ├── elasticsearch.go │ ├── error_handling_test.go │ ├── kinds │ │ └── dataquery │ │ │ └── types_dataquery_gen.go │ ├── models.go │ ├── parse_query.go │ ├── parse_query_test.go │ ├── querydata_test.go │ ├── quickwit.go │ ├── response_parser.go │ ├── response_parser_qw_test.go │ ├── response_parser_test.go │ ├── simplejson │ │ ├── simplejson.go │ │ └── simplejson_go11.go │ ├── snapshot_test.go │ ├── testdata │ │ └── trimedges_string.golden.jsonc │ ├── timestamp_infos.go │ └── timestamp_infos_test.go └── utils │ ├── parse_time.go │ └── parse_time_test.go ├── src ├── LanguageProvider.test.ts ├── LanguageProvider.ts ├── LogContext │ ├── LogContextProvider.ts │ ├── components │ │ ├── LogContextQueryBuilderSidebar.stories.ts │ │ ├── LogContextQueryBuilderSidebar.tsx │ │ └── LogContextUI.tsx │ ├── types.tsx │ ├── utils.test.ts │ └── utils.ts ├── QueryBuilder │ ├── elastic.ts │ └── lucene.ts ├── README.md ├── components │ ├── AddRemove.test.tsx │ ├── AddRemove.tsx │ ├── Divider.tsx │ ├── IconButton.tsx │ ├── LuceneQueryEditor.stories.ts │ ├── LuceneQueryEditor.tsx │ ├── MetricPicker.tsx │ ├── QueryEditor │ │ ├── AnnotationQueryEditor.tsx │ │ ├── BucketAggregationsEditor │ │ │ ├── BucketAggregationEditor.tsx │ │ │ ├── SettingsEditor │ │ │ │ ├── DateHistogramSettingsEditor.tsx │ │ │ │ ├── FiltersSettingsEditor │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── state │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── reducer.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── TermsSettingsEditor.test.tsx │ │ │ │ ├── TermsSettingsEditor.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useDescription.ts │ │ │ ├── aggregations.ts │ │ │ ├── index.tsx │ │ │ ├── state │ │ │ │ ├── actions.ts │ │ │ │ ├── reducer.test.ts │ │ │ │ └── reducer.ts │ │ │ └── utils.ts │ │ ├── ElasticsearchQueryContext.test.tsx │ │ ├── ElasticsearchQueryContext.tsx │ │ ├── MetricAggregationsEditor │ │ │ ├── MetricEditor.test.tsx │ │ │ ├── MetricEditor.tsx │ │ │ ├── SettingsEditor │ │ │ │ ├── BucketScriptSettingsEditor │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── state │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── reducer.ts │ │ │ │ │ ├── utils.test.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── LogsSettingsEditor.tsx │ │ │ │ ├── MovingAverageSettingsEditor.tsx │ │ │ │ ├── SettingField.tsx │ │ │ │ ├── TopMetricsSettingsEditor.tsx │ │ │ │ ├── index.test.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useDescription.ts │ │ │ ├── aggregations.ts │ │ │ ├── index.tsx │ │ │ ├── state │ │ │ │ ├── actions.ts │ │ │ │ ├── reducer.test.ts │ │ │ │ └── reducer.ts │ │ │ ├── styles.ts │ │ │ └── utils.ts │ │ ├── QueryEditorRow.tsx │ │ ├── QueryTypeSelector.tsx │ │ ├── SettingsEditorContainer.tsx │ │ ├── index.test.tsx │ │ ├── index.tsx │ │ ├── state.test.ts │ │ ├── state.ts │ │ └── styles.ts │ ├── hooks │ │ ├── useCreatableSelectPersistedBehaviour.test.tsx │ │ └── useCreatableSelectPersistedBehaviour.ts │ └── types.ts ├── configuration │ ├── ConfigEditor.test.tsx │ ├── ConfigEditor.tsx │ ├── DataLink.tsx │ ├── DataLinks.test.tsx │ ├── DataLinks.tsx │ ├── mocks.ts │ └── utils.ts ├── dataquery.gen.ts ├── datasource │ ├── base.ts │ ├── index.ts │ ├── logsContext.ts │ ├── processResponse.ts │ ├── supplementaryQueries.ts │ └── utils.ts ├── dependencies │ ├── DataSourcePicker.tsx │ ├── PluginSignatureBadge.tsx │ ├── flatten.ts │ ├── matchers │ │ ├── index.ts │ │ ├── toEmitValuesWith.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── mocks.ts │ ├── reducerTester.ts │ └── table_model.ts ├── hooks │ ├── useFields.test.tsx │ ├── useFields.ts │ ├── useNextId.test.tsx │ ├── useNextId.ts │ ├── useStatelessReducer.test.tsx │ └── useStatelessReducer.ts ├── img │ ├── logo.svg │ ├── screenshot-dashboard-view.png │ ├── screenshot-explorer-view-with-query.png │ ├── screenshot-explorer-view-with-raw-query.png │ └── screenshot-explorer-view.png ├── mocks.ts ├── modifyQuery.ts ├── module.ts ├── plugin.json ├── queryDef.ts ├── quickwit.ts ├── store │ ├── defaults │ │ ├── conf.ts │ │ └── index.ts │ └── index.ts ├── test-helpers │ └── render.tsx ├── types.ts ├── typings │ └── index.d.ts └── utils │ ├── context.ts │ ├── index.test.ts │ ├── index.ts │ ├── lucene.ts │ ├── mixins.ts │ ├── time.ts │ └── uid.ts └── tsconfig.json /.config/.eslintrc: -------------------------------------------------------------------------------- 1 | /* 2 | * ⚠️⚠️⚠️ THIS FILE WAS SCAFFOLDED BY `@grafana/create-plugin`. DO NOT EDIT THIS FILE DIRECTLY. ⚠️⚠️⚠️ 3 | * 4 | * In order to extend the configuration follow the steps in 5 | * https://grafana.github.io/plugin-tools/docs/advanced-configuration#extending-the-eslint-config 6 | */ 7 | { 8 | "extends": ["@grafana/eslint-config"], 9 | "root": true, 10 | "rules": { 11 | "react/prop-types": "off" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /.config/.prettierrc.js: -------------------------------------------------------------------------------- 1 | /* 2 | * ⚠️⚠️⚠️ THIS FILE WAS SCAFFOLDED BY `@grafana/create-plugin`. DO NOT EDIT THIS FILE DIRECTLY. ⚠️⚠️⚠️ 3 | * 4 | * In order to extend the configuration follow the steps in .config/README.md 5 | */ 6 | 7 | module.exports = { 8 | "endOfLine": "auto", 9 | "printWidth": 120, 10 | "trailingComma": "es5", 11 | "semi": true, 12 | "jsxSingleQuote": false, 13 | "singleQuote": true, 14 | "useTabs": false, 15 | "tabWidth": 2 16 | }; -------------------------------------------------------------------------------- /.config/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG grafana_version=latest 2 | ARG grafana_image=grafana-enterprise 3 | 4 | FROM grafana/${grafana_image}:${grafana_version} 5 | 6 | # Make it as simple as possible to access the grafana instance for development purposes 7 | # Do NOT enable these settings in a public facing / production grafana instance 8 | ENV GF_AUTH_ANONYMOUS_ORG_ROLE "Admin" 9 | ENV GF_AUTH_ANONYMOUS_ENABLED "true" 10 | ENV GF_AUTH_BASIC_ENABLED "false" 11 | # Set development mode so plugins can be loaded without the need to sign 12 | ENV GF_DEFAULT_APP_MODE "development" 13 | 14 | # Inject livereload script into grafana index.html 15 | USER root 16 | RUN sed -i 's/<\/body><\/html>/