├── .dockerignore ├── .env.development ├── .env.production ├── .env.staging ├── .env.test ├── .eslintignore ├── .eslintrc-auto-import.json ├── .eslintrc.js ├── .github ├── dependabot.yml └── workflows │ ├── docker-manual-build.yml │ ├── docker-release.yml │ ├── node.js.yml │ └── release.yml ├── .gitignore ├── .husky ├── commit-msg └── pre-commit ├── .prettierignore ├── .prettierrc.js ├── .stylelintrc.js ├── .vscode └── settings.json ├── AWSCLIV2.pkg ├── LICENSE ├── README.md ├── babel.config.js ├── commitlint.config.js ├── config ├── plugin │ ├── arcoResolver.ts │ ├── compress.ts │ ├── imagemin.ts │ ├── styleImport.ts │ └── visualizer.ts ├── utils │ └── index.ts ├── vite.config.base.ts ├── vite.config.dev.ts └── vite.config.prod.ts ├── docker ├── Dockerfile ├── Dockerfile.runtimeonly ├── README.md ├── docker-compose.yml └── greptimedb.conf ├── index.html ├── package.json ├── pnpm-lock.yaml ├── screenshot1.png ├── screenshot2.png ├── shims.d.ts ├── src-tauri ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── build.rs ├── capabilities │ ├── default.json │ └── desktop.json ├── icons │ ├── 128x128.png │ ├── 128x128@2x.png │ ├── 32x32.png │ ├── 64x64.png │ ├── Square107x107Logo.png │ ├── Square142x142Logo.png │ ├── Square150x150Logo.png │ ├── Square284x284Logo.png │ ├── Square30x30Logo.png │ ├── Square310x310Logo.png │ ├── Square44x44Logo.png │ ├── Square71x71Logo.png │ ├── Square89x89Logo.png │ ├── StoreLogo.png │ ├── icon.icns │ ├── icon.ico │ └── icon.png ├── src │ ├── app_plugin.rs │ ├── lib.rs │ └── main.rs └── tauri.conf.json ├── src ├── App.vue ├── api │ ├── axios.d.ts │ ├── editor.ts │ ├── gist.ts │ ├── interceptor.ts │ ├── message.ts │ ├── pipeline.ts │ ├── playground.ts │ └── status.ts ├── assets │ ├── favicon.ico │ ├── fonts │ │ ├── Gilroy-ExtraBold.otf │ │ ├── Gilroy-Regular.otf │ │ ├── OpenSans-ExtraBold.ttf │ │ ├── OpenSans-Regular.ttf │ │ └── OpenSans-SemiBold.ttf │ ├── icons.js │ ├── images │ │ └── logo-text.png │ ├── style │ │ ├── breakpoint.less │ │ ├── button.less │ │ ├── custom-block.less │ │ ├── dataView.less │ │ ├── docs.less │ │ ├── editor.less │ │ ├── form.less │ │ ├── global.less │ │ ├── layout.less │ │ ├── list.less │ │ ├── log.less │ │ ├── new.less │ │ ├── select.less │ │ ├── tableList.less │ │ ├── tour.less │ │ ├── vars.less │ │ └── vp-doc.less │ ├── svg-list.ts │ └── world.json ├── components │ ├── breadcrumb │ │ └── index.vue │ ├── chart │ │ ├── chartTheme.json │ │ └── index.vue │ ├── empty-status.vue │ ├── footer │ │ └── index.vue │ ├── global-setting │ │ └── index.vue │ ├── guide-modal │ │ └── index.vue │ ├── index.ts │ ├── markdown-render │ │ ├── components │ │ │ ├── code-editor.vue │ │ │ ├── importPresets.vue │ │ │ └── utils.ts │ │ ├── composables │ │ │ └── codeGroups.ts │ │ ├── index.vue │ │ └── plugins │ │ │ ├── containerPlugin.ts │ │ │ ├── customButton.ts │ │ │ ├── customCode.ts │ │ │ ├── customComment.ts │ │ │ ├── customImage.ts │ │ │ └── index.ts │ ├── menu │ │ ├── index.vue │ │ └── use-menu-tree.ts │ ├── navbar │ │ └── index.vue │ ├── refresh-playground-modal │ │ └── index.vue │ ├── short-cut │ │ └── index.vue │ ├── simple-markdown │ │ ├── components │ │ │ └── simple-code-editor.vue │ │ ├── index.vue │ │ └── plugins │ │ │ ├── customCode.ts │ │ │ └── index.ts │ ├── social-link │ │ └── index.vue │ ├── status-bar │ │ └── status-list.vue │ ├── tab-bar │ │ ├── index.vue │ │ ├── readme.md │ │ └── tab-item.vue │ ├── table-menu │ │ └── index.vue │ ├── text-copyable.vue │ ├── time-select │ │ └── index.vue │ └── yml-editor.vue ├── config │ └── settings.json ├── directive │ ├── index.ts │ └── permission │ │ └── index.ts ├── env.d.ts ├── hooks │ ├── chart-option.ts │ ├── data-chart.ts │ ├── gist.ts │ ├── index.ts │ ├── loading.ts │ ├── locale.ts │ ├── log.ts │ ├── permission.ts │ ├── python-code.ts │ ├── query-code.ts │ ├── request.ts │ ├── responsive.ts │ ├── sider-tabs.ts │ ├── themes.ts │ ├── types.ts │ ├── user.ts │ └── visible.ts ├── layout │ ├── default-layout.vue │ └── page-layout.vue ├── locale │ ├── en-US.ts │ ├── en-US │ │ ├── dashboard.ts │ │ ├── logquery.ts │ │ ├── menu.ts │ │ ├── playground.ts │ │ └── settings.ts │ ├── index.ts │ ├── zh-CN.ts │ └── zh-CN │ │ ├── dashboard.ts │ │ ├── logquery.ts │ │ ├── menu.ts │ │ ├── playground.ts │ │ └── settings.ts ├── main.ts ├── router │ ├── app-menus │ │ └── index.ts │ ├── constants.ts │ ├── guard │ │ ├── index.ts │ │ ├── permission.ts │ │ └── userLoginInfo.ts │ ├── index.ts │ ├── routes │ │ ├── base.ts │ │ ├── client.ts │ │ ├── externalModules │ │ │ ├── arco.ts │ │ │ └── faq.ts │ │ ├── index.ts │ │ ├── modules │ │ │ └── dashboard.ts │ │ └── types.ts │ └── typings.d.ts ├── store │ ├── index.ts │ └── modules │ │ ├── app │ │ ├── index.ts │ │ └── types.ts │ │ ├── code-run │ │ ├── index.ts │ │ └── types.ts │ │ ├── database │ │ ├── index.ts │ │ └── types.ts │ │ ├── ingest │ │ └── index.ts │ │ ├── log │ │ ├── index.ts │ │ └── types.ts │ │ ├── logquery │ │ └── index.ts │ │ ├── status-bar │ │ └── index.ts │ │ ├── tab-bar │ │ ├── index.ts │ │ └── types.ts │ │ └── user │ │ ├── index.ts │ │ └── types.ts ├── tauri │ ├── about.vue │ ├── index.js │ ├── layout.vue │ └── menu.js ├── types │ ├── echarts.ts │ └── global.ts ├── utils │ ├── env.ts │ ├── event.ts │ ├── index.ts │ ├── is.ts │ ├── monitor.ts │ ├── route-listener.ts │ └── sql.ts └── views │ ├── dashboard │ ├── config.ts │ ├── ingest │ │ ├── doc.md │ │ ├── index.vue │ │ ├── influxdb │ │ │ ├── index.vue │ │ │ ├── input.vue │ │ │ └── upload.vue │ │ ├── panel-icon.vue │ │ └── top-bar.vue │ ├── logs │ │ ├── pipelines │ │ │ ├── PipeFileView.vue │ │ │ └── index.vue │ │ └── query │ │ │ ├── ChartContainer.vue │ │ │ ├── CountChart.vue │ │ │ ├── ExportLog.vue │ │ │ ├── FormView.vue │ │ │ ├── FunnelChart.vue │ │ │ ├── InputEditor.vue │ │ │ ├── JSONView.vue │ │ │ ├── LogDetail.vue │ │ │ ├── Pagination.vue │ │ │ ├── SQLBuilder.vue │ │ │ ├── SavedQuery.vue │ │ │ ├── TableData.vue │ │ │ ├── Toolbar.vue │ │ │ ├── index.vue │ │ │ ├── types.ts │ │ │ └── until.ts │ ├── modules │ │ ├── data-view │ │ │ ├── components │ │ │ │ ├── data-chart.vue │ │ │ │ └── data-grid.vue │ │ │ └── index.vue │ │ ├── explain │ │ │ ├── explain-chart │ │ │ │ ├── chart-controls.vue │ │ │ │ ├── index.vue │ │ │ │ ├── navigation-arrows.vue │ │ │ │ ├── plan-card.vue │ │ │ │ ├── tree-view.vue │ │ │ │ └── zoom-controls.vue │ │ │ ├── explain-grid.vue │ │ │ └── utils.ts │ │ ├── favorite.vue │ │ ├── list-tabs.vue │ │ ├── log.vue │ │ ├── logs-layout.vue │ │ ├── logs-new.vue │ │ ├── logs.vue │ │ ├── query-modal │ │ │ └── index.vue │ │ ├── scripts-list.vue │ │ ├── table-list.vue │ │ └── table-manager.vue │ ├── playground │ │ ├── docs │ │ │ ├── getting-started.md │ │ │ └── host-metrics-promql.md │ │ └── index.vue │ ├── query │ │ ├── editor.vue │ │ └── index.vue │ ├── scripts │ │ ├── index.vue │ │ └── py-editor.vue │ └── status │ │ └── index.vue │ ├── not-found │ └── index.vue │ └── redirect │ └── index.vue └── tsconfig.json /.dockerignore: -------------------------------------------------------------------------------- 1 | # macOS trash 2 | .DS_Store 3 | 4 | # Visual Studio Code 5 | .vscode/ 6 | .devcontainer/ 7 | 8 | # Eclipse files 9 | .classpath 10 | .project 11 | .settings/** 12 | 13 | # Vim swap files 14 | *.swp 15 | 16 | # Files generated by JetBrains IDEs, e.g. IntelliJ IDEA 17 | .idea/ 18 | *.iml 19 | out/ 20 | 21 | # Rust 22 | target/ 23 | 24 | # Node 25 | node_modules/ 26 | 27 | # Git 28 | .git 29 | -------------------------------------------------------------------------------- /.env.development: -------------------------------------------------------------------------------- 1 | VITE_CLOUD_URL='https://dev.greptime-cloud-frontend.pages.dev' 2 | VITE_API_BASE_URL='https://api-preview.greptime.cloud' 3 | VITE_ROLE='admin' 4 | -------------------------------------------------------------------------------- /.env.production: -------------------------------------------------------------------------------- 1 | VITE_CLOUD_URL='https://dev.greptime-cloud-frontend.pages.dev' 2 | VITE_API_BASE_URL='https://api-preview.greptime.cloud' 3 | VITE_ROLE='admin' -------------------------------------------------------------------------------- /.env.staging: -------------------------------------------------------------------------------- 1 | VITE_CLOUD_URL='https://console.greptime.cloud' 2 | VITE_API_BASE_URL='https://api.greptime.cloud' 3 | VITE_ROLE='cloud' -------------------------------------------------------------------------------- /.env.test: -------------------------------------------------------------------------------- 1 | VITE_CLOUD_URL='https://dev.greptime-cloud-frontend.pages.dev' 2 | VITE_API_BASE_URL='https://api-preview.greptime.cloud' 3 | VITE_ROLE='cloud' -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /*.json 2 | /*.js 3 | dist 4 | **/icons.js -------------------------------------------------------------------------------- /.eslintrc-auto-import.json: -------------------------------------------------------------------------------- 1 | { 2 | "globals": { 3 | "Component": true, 4 | "ComponentPublicInstance": true, 5 | "ComputedRef": true, 6 | "EffectScope": true, 7 | "InjectionKey": true, 8 | "PropType": true, 9 | "Ref": true, 10 | "VNode": true, 11 | "WritableComputedRef": true, 12 | "acceptHMRUpdate": true, 13 | "chartOption": true, 14 | "computed": true, 15 | "createApp": true, 16 | "createPinia": true, 17 | "customRef": true, 18 | "dataChart": true, 19 | "defineAsyncComponent": true, 20 | "defineComponent": true, 21 | "defineStore": true, 22 | "effectScope": true, 23 | "getActivePinia": true, 24 | "getCurrentInstance": true, 25 | "getCurrentScope": true, 26 | "gist": true, 27 | "h": true, 28 | "inject": true, 29 | "isProxy": true, 30 | "isReactive": true, 31 | "isReadonly": true, 32 | "isRef": true, 33 | "loading": true, 34 | "locale": true, 35 | "log": true, 36 | "mapActions": true, 37 | "mapGetters": true, 38 | "mapState": true, 39 | "mapStores": true, 40 | "mapWritableState": true, 41 | "markRaw": true, 42 | "nextTick": true, 43 | "onActivated": true, 44 | "onBeforeMount": true, 45 | "onBeforeRouteLeave": true, 46 | "onBeforeRouteUpdate": true, 47 | "onBeforeUnmount": true, 48 | "onBeforeUpdate": true, 49 | "onDeactivated": true, 50 | "onErrorCaptured": true, 51 | "onMounted": true, 52 | "onRenderTracked": true, 53 | "onRenderTriggered": true, 54 | "onScopeDispose": true, 55 | "onServerPrefetch": true, 56 | "onUnmounted": true, 57 | "onUpdated": true, 58 | "permission": true, 59 | "provide": true, 60 | "pythonCode": true, 61 | "queryCode": true, 62 | "reactive": true, 63 | "readonly": true, 64 | "ref": true, 65 | "request": true, 66 | "resolveComponent": true, 67 | "responsive": true, 68 | "setActivePinia": true, 69 | "setMapStoreSuffix": true, 70 | "shallowReactive": true, 71 | "shallowReadonly": true, 72 | "shallowRef": true, 73 | "siderTabs": true, 74 | "store": true, 75 | "storeToRefs": true, 76 | "stringType": true, 77 | "themes": true, 78 | "toRaw": true, 79 | "toRef": true, 80 | "toRefs": true, 81 | "toValue": true, 82 | "triggerRef": true, 83 | "unref": true, 84 | "useAppStore": true, 85 | "useAttrs": true, 86 | "useChartOption": true, 87 | "useCodeRunStore": true, 88 | "useCssModule": true, 89 | "useCssVars": true, 90 | "useDataBaseStore": true, 91 | "useGist": true, 92 | "useIngestStore": true, 93 | "useLink": true, 94 | "useLog": true, 95 | "useLogStore": true, 96 | "useQueryCode": true, 97 | "useRoute": true, 98 | "useRouter": true, 99 | "useSlots": true, 100 | "useStatusBarStore": true, 101 | "useTabBarStore": true, 102 | "useUserStore": true, 103 | "visible": true, 104 | "watch": true, 105 | "watchEffect": true, 106 | "watchPostEffect": true, 107 | "watchSyncEffect": true 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line @typescript-eslint/no-var-requires 2 | const path = require('path') 3 | 4 | module.exports = { 5 | root: true, 6 | parser: 'vue-eslint-parser', 7 | parserOptions: { 8 | // Parser that checks the content of the 12 |
13 | 14 |