From 1a23f867dab3ecb19820d272c4e1a97e74f51918 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Tue, 29 Mar 2022 08:25:28 -0800 Subject: [PATCH] feat: admin maintenance and analytics stubs (#1107) * add tail log viewer routes * add log viewer * add _mealie to ignore directories * add detailed breakdown of storage * generate types * add dialog to view breakdown * cleanup mobile UI * move migrations page * spelling * init analytics page * move route up * add remove temp files function * analytics API client * stub out analytics pages * generate types * stub out analytics routes * update names * ignore types * temporary remove analytics from sidebar --- dev/code-generation/gen_frontend_types.py | 2 +- frontend/api/admin-api.ts | 3 + frontend/api/admin/admin-analytics.ts | 14 ++ frontend/api/admin/admin-maintenance.ts | 17 ++- frontend/layouts/admin.vue | 12 +- frontend/pages/admin/analytics.vue | 137 ++++++++++++++++++ .../index.vue} | 107 ++++++++++++-- frontend/pages/admin/maintenance/logs.vue | 100 +++++++++++++ frontend/pages/admin/migrations.vue | 29 ---- frontend/pages/group/mealplan/planner.vue | 2 +- frontend/types/api-types/admin.ts | 10 ++ frontend/types/api-types/analytics.ts | 20 +++ frontend/utils/icons/icon-type.ts | 4 +- frontend/utils/icons/icons.ts | 7 +- mealie/routes/admin/__init__.py | 6 +- mealie/routes/admin/admin_analytics.py | 20 +++ mealie/routes/admin/admin_maintenance.py | 36 +++++ mealie/schema/_mealie/__init__.py | 1 + mealie/schema/admin/maintenance.py | 12 ++ mealie/schema/analytics/__init__.py | 2 + mealie/schema/analytics/analytics.py | 19 +++ mealie/schema/recipe/__init__.py | 2 +- .../services/analytics/service_analytics.py | 33 +++++ 23 files changed, 536 insertions(+), 59 deletions(-) create mode 100644 frontend/api/admin/admin-analytics.ts create mode 100644 frontend/pages/admin/analytics.vue rename frontend/pages/admin/{maintenance.vue => maintenance/index.vue} (55%) create mode 100644 frontend/pages/admin/maintenance/logs.vue delete mode 100644 frontend/pages/admin/migrations.vue create mode 100644 frontend/types/api-types/analytics.ts create mode 100644 mealie/routes/admin/admin_analytics.py create mode 100644 mealie/schema/analytics/__init__.py create mode 100644 mealie/schema/analytics/analytics.py create mode 100644 mealie/services/analytics/service_analytics.py diff --git a/dev/code-generation/gen_frontend_types.py b/dev/code-generation/gen_frontend_types.py index ccd2af8f0..1ac4744bc 100644 --- a/dev/code-generation/gen_frontend_types.py +++ b/dev/code-generation/gen_frontend_types.py @@ -76,7 +76,7 @@ def generate_typescript_types() -> None: schema_path = PROJECT_DIR / "mealie" / "schema" types_dir = PROJECT_DIR / "frontend" / "types" / "api-types" - ignore_dirs = ["__pycache__", "static"] + ignore_dirs = ["__pycache__", "static", "_mealie"] skipped_files: list[Path] = [] skipped_dirs: list[Path] = [] diff --git a/frontend/api/admin-api.ts b/frontend/api/admin-api.ts index b50450e4b..d2567e330 100644 --- a/frontend/api/admin-api.ts +++ b/frontend/api/admin-api.ts @@ -4,6 +4,7 @@ import { AdminUsersApi } from "./admin/admin-users"; import { AdminGroupsApi } from "./admin/admin-groups"; import { AdminBackupsApi } from "./admin/admin-backups"; import { AdminMaintenanceApi } from "./admin/admin-maintenance"; +import { AdminAnalyticsApi } from "./admin/admin-analytics"; import { ApiRequestInstance } from "~/types/api"; export class AdminAPI { @@ -13,6 +14,7 @@ export class AdminAPI { public groups: AdminGroupsApi; public backups: AdminBackupsApi; public maintenance: AdminMaintenanceApi; + public analytics: AdminAnalyticsApi; constructor(requests: ApiRequestInstance) { this.about = new AdminAboutAPI(requests); @@ -21,6 +23,7 @@ export class AdminAPI { this.groups = new AdminGroupsApi(requests); this.backups = new AdminBackupsApi(requests); this.maintenance = new AdminMaintenanceApi(requests); + this.analytics = new AdminAnalyticsApi(requests); Object.freeze(this); } diff --git a/frontend/api/admin/admin-analytics.ts b/frontend/api/admin/admin-analytics.ts new file mode 100644 index 000000000..3947899ca --- /dev/null +++ b/frontend/api/admin/admin-analytics.ts @@ -0,0 +1,14 @@ +import { BaseAPI } from "../_base"; +import { MealieAnalytics } from "~/types/api-types/analytics"; + +const prefix = "/api"; + +const routes = { + base: `${prefix}/admin/analytics`, +}; + +export class AdminAnalyticsApi extends BaseAPI { + async getAnalytics() { + return await this.requests.get(routes.base); + } +} diff --git a/frontend/api/admin/admin-maintenance.ts b/frontend/api/admin/admin-maintenance.ts index 9b286ec2f..820d58b23 100644 --- a/frontend/api/admin/admin-maintenance.ts +++ b/frontend/api/admin/admin-maintenance.ts @@ -1,11 +1,14 @@ import { BaseAPI } from "../_base"; import { SuccessResponse } from "~/types/api-types/response"; -import { MaintenanceSummary } from "~/types/api-types/admin"; +import { MaintenanceLogs, MaintenanceStorageDetails, MaintenanceSummary } from "~/types/api-types/admin"; const prefix = "/api"; const routes = { base: `${prefix}/admin/maintenance`, + storage: `${prefix}/admin/maintenance/storage`, + logs: (lines: number) => `${prefix}/admin/maintenance/logs?lines=${lines}`, + cleanTemp: `${prefix}/admin/maintenance/clean/temp`, cleanImages: `${prefix}/admin/maintenance/clean/images`, cleanRecipeFolders: `${prefix}/admin/maintenance/clean/recipe-folders`, cleanLogFile: `${prefix}/admin/maintenance/clean/logs`, @@ -16,6 +19,14 @@ export class AdminMaintenanceApi extends BaseAPI { return this.requests.get(routes.base); } + async getStorageDetails() { + return await this.requests.get(routes.storage); + } + + async cleanTemp() { + return await this.requests.post(routes.cleanTemp, {}); + } + async cleanImages() { return await this.requests.post(routes.cleanImages, {}); } @@ -27,4 +38,8 @@ export class AdminMaintenanceApi extends BaseAPI { async cleanLogFile() { return await this.requests.post(routes.cleanLogFile, {}); } + + async logs(lines: number) { + return await this.requests.get(routes.logs(lines)); + } } diff --git a/frontend/layouts/admin.vue b/frontend/layouts/admin.vue index 7affb7799..11a7dce40 100644 --- a/frontend/layouts/admin.vue +++ b/frontend/layouts/admin.vue @@ -44,21 +44,21 @@ export default defineComponent({ }); const topLinks: SidebarLinks = [ - // { - // icon: $globals.icons.viewDashboard, - // to: "/admin/dashboard", - // title: i18n.t("sidebar.dashboard"), - // }, { icon: $globals.icons.cog, to: "/admin/site-settings", title: i18n.t("sidebar.site-settings"), }, { - icon: $globals.icons.cog, + icon: $globals.icons.wrench, to: "/admin/maintenance", title: "Maintenance", }, + // { + // icon: $globals.icons.chart, + // to: "/admin/analytics", + // title: "Analytics", + // }, { icon: $globals.icons.user, to: "/admin/manage/users", diff --git a/frontend/pages/admin/analytics.vue b/frontend/pages/admin/analytics.vue new file mode 100644 index 000000000..623277767 --- /dev/null +++ b/frontend/pages/admin/analytics.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/frontend/pages/admin/maintenance.vue b/frontend/pages/admin/maintenance/index.vue similarity index 55% rename from frontend/pages/admin/maintenance.vue rename to frontend/pages/admin/maintenance/index.vue index 999f688ed..a5470f643 100644 --- a/frontend/pages/admin/maintenance.vue +++ b/frontend/pages/admin/maintenance/index.vue @@ -1,51 +1,69 @@