diff --git a/dev/code-generation/gen_frontend_types.py b/dev/code-generation/gen_frontend_types.py index ccd2af8f0fd8..1ac4744bcf96 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 b50450e4b8d2..d2567e330147 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 000000000000..3947899cabf9 --- /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 9b286ec2f2bf..820d58b23eac 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 7affb7799fc8..11a7dce406bb 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 000000000000..6232777672ac --- /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 999f688ed3ac..a5470f643746 100644 --- a/frontend/pages/admin/maintenance.vue +++ b/frontend/pages/admin/maintenance/index.vue @@ -1,51 +1,69 @@