diff --git a/backend/lib/core/capabilities/CurrentStatisticsCapability.js b/backend/lib/core/capabilities/CurrentStatisticsCapability.js new file mode 100644 index 00000000000..aedd6463fbe --- /dev/null +++ b/backend/lib/core/capabilities/CurrentStatisticsCapability.js @@ -0,0 +1,26 @@ +const Capability = require("./Capability"); +const NotImplementedError = require("../NotImplementedError"); +const ValetudoDataPoint = require("../../entities/core/ValetudoDataPoint"); + +/** + * @template {import("../ValetudoRobot")} T + * @extends Capability + */ +class CurrentStatisticsCapability extends Capability { + /** + * The amount and type of stuff returned here depends on the robots implementation + * + * @return {Promise>} + */ + async getStatistics() { + throw new NotImplementedError(); + } + + getType() { + return CurrentStatisticsCapability.TYPE; + } +} + +CurrentStatisticsCapability.TYPE = "CurrentStatisticsCapability"; + +module.exports = CurrentStatisticsCapability; diff --git a/backend/lib/core/capabilities/index.js b/backend/lib/core/capabilities/index.js index 696bd3523b5..e159e887574 100644 --- a/backend/lib/core/capabilities/index.js +++ b/backend/lib/core/capabilities/index.js @@ -5,6 +5,7 @@ module.exports = { CarpetModeControlCapability: require("./CarpetModeControlCapability"), CombinedVirtualRestrictionsCapability: require("./CombinedVirtualRestrictionsCapability"), ConsumableMonitoringCapability: require("./ConsumableMonitoringCapability"), + CurrentStatisticsCapability: require("./CurrentStatisticsCapability"), DebugCapability: require("./DebugCapability"), DoNotDisturbCapability: require("./DoNotDisturbCapability"), FanSpeedControlCapability: require("./FanSpeedControlCapability"), diff --git a/backend/lib/webserver/CapabilitiesRouter.js b/backend/lib/webserver/CapabilitiesRouter.js index b1d5c3eb98d..a5861781649 100644 --- a/backend/lib/webserver/CapabilitiesRouter.js +++ b/backend/lib/webserver/CapabilitiesRouter.js @@ -87,7 +87,8 @@ const CAPABILITY_TYPE_TO_ROUTER_MAPPING = { [capabilities.ObstacleAvoidanceControlCapability.TYPE]: capabilityRouters.SimpleToggleCapabilityRouter, [capabilities.AutoEmptyDockAutoEmptyControlCapability.TYPE]: capabilityRouters.SimpleToggleCapabilityRouter, [capabilities.AutoEmptyDockManualTriggerCapability.TYPE]: capabilityRouters.AutoEmptyDockManualTriggerCapabilityRouter, - [capabilities.TotalStatisticsCapability.TYPE]: capabilityRouters.TotalStatisticsCapabilityRouter + [capabilities.TotalStatisticsCapability.TYPE]: capabilityRouters.StatisticsCapabilityRouter, + [capabilities.CurrentStatisticsCapability.TYPE]: capabilityRouters.StatisticsCapabilityRouter }; module.exports = CapabilitiesRouter; diff --git a/backend/lib/webserver/capabilityRouters/TotalStatisticsCapabilityRouter.js b/backend/lib/webserver/capabilityRouters/StatisticsCapabilityRouter.js similarity index 65% rename from backend/lib/webserver/capabilityRouters/TotalStatisticsCapabilityRouter.js rename to backend/lib/webserver/capabilityRouters/StatisticsCapabilityRouter.js index 4cd2bfb4604..9ac86d0a2a3 100644 --- a/backend/lib/webserver/capabilityRouters/TotalStatisticsCapabilityRouter.js +++ b/backend/lib/webserver/capabilityRouters/StatisticsCapabilityRouter.js @@ -1,17 +1,17 @@ const CapabilityRouter = require("./CapabilityRouter"); const Logger = require("../../Logger"); -class TotalStatisticsCapabilityRouter extends CapabilityRouter { +class StatisticsCapabilityRouter extends CapabilityRouter { initRoutes() { this.router.get("/", async (req, res) => { try { res.json(await this.capability.getStatistics()); } catch (e) { - Logger.warn("Error while fetching total statistics", e); + Logger.warn("Error while fetching statistics", e); res.status(500).json(e.message); } }); } } -module.exports = TotalStatisticsCapabilityRouter; +module.exports = StatisticsCapabilityRouter; diff --git a/backend/lib/webserver/capabilityRouters/doc/StatisticsCapabilityRouter.openapi.json b/backend/lib/webserver/capabilityRouters/doc/StatisticsCapabilityRouter.openapi.json new file mode 100644 index 00000000000..dd241cd798e --- /dev/null +++ b/backend/lib/webserver/capabilityRouters/doc/StatisticsCapabilityRouter.openapi.json @@ -0,0 +1,89 @@ +{ + "/api/v2/robot/capabilities/TotalStatisticsCapability": { + "get": { + "tags": [ + "TotalStatisticsCapability" + ], + "summary": "Get total statistics", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ValetudoDataPoint" + } + } + } + } + } + } + } + }, + "/api/v2/robot/capabilities/TotalStatisticsCapability/properties": { + "get": { + "tags": [ + "TotalStatisticsCapability" + ], + "summary": "Get various capability-related properties", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + + "/api/v2/robot/capabilities/CurrentStatisticsCapability": { + "get": { + "tags": [ + "CurrentStatisticsCapability" + ], + "summary": "Get statistics about the current (or last) task", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ValetudoDataPoint" + } + } + } + } + } + } + } + }, + "/api/v2/robot/capabilities/CurrentStatisticsCapability/properties": { + "get": { + "tags": [ + "CurrentStatisticsCapability" + ], + "summary": "Get various capability-related properties", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + } +} diff --git a/backend/lib/webserver/capabilityRouters/doc/TotalStatisticsCapabilityRouter.openapi.json b/backend/lib/webserver/capabilityRouters/doc/TotalStatisticsCapabilityRouter.openapi.json deleted file mode 100644 index ccc29d8f201..00000000000 --- a/backend/lib/webserver/capabilityRouters/doc/TotalStatisticsCapabilityRouter.openapi.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "/api/v2/robot/capabilities/TotalStatisticsCapability": { - "get": { - "tags": [ - "TotalStatisticsCapability" - ], - "summary": "Get total statistics", - "responses": { - "200": { - "description": "Ok", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ValetudoDataPoint" - } - } - } - } - } - } - } - }, - "/api/v2/robot/capabilities/TotalStatisticsCapability/properties": { - "get": { - "tags": [ - "TotalStatisticsCapability" - ], - "summary": "Get various capability-related properties", - "responses": { - "200": { - "description": "Ok", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - } - } - } - } -} diff --git a/backend/lib/webserver/capabilityRouters/index.js b/backend/lib/webserver/capabilityRouters/index.js index a27b26246a7..65c0020f64f 100644 --- a/backend/lib/webserver/capabilityRouters/index.js +++ b/backend/lib/webserver/capabilityRouters/index.js @@ -21,7 +21,7 @@ module.exports = { SimpleToggleCapabilityRouter: require("./SimpleToggleCapabilityRouter"), SpeakerTestCapabilityRouter: require("./SpeakerTestCapabilityRouter"), SpeakerVolumeControlCapabilityRouter: require("./SpeakerVolumeControlCapabilityRouter"), - TotalStatisticsCapabilityRouter: require("./TotalStatisticsCapabilityRouter"), + StatisticsCapabilityRouter: require("./StatisticsCapabilityRouter"), VoicePackManagementCapabilityRouter: require("./VoicePackManagementCapabilityRouter"), WifiConfigurationCapabilityRouter: require("./WifiConfigurationCapabilityRouter"), ZoneCleaningCapabilityRouter: require("./ZoneCleaningCapabilityRouter")