diff --git a/moonraker/plugins/machine.py b/moonraker/plugins/machine.py index 9866413..33969c8 100644 --- a/moonraker/plugins/machine.py +++ b/moonraker/plugins/machine.py @@ -17,7 +17,13 @@ class Machine: "/machine/shutdown", ['POST'], self._handle_machine_request) self.server.register_endpoint( "/machine/services/restart", ['POST'], - self._handle_service_restart) + self._handle_service_request) + self.server.register_endpoint( + "/machine/services/stop", ['POST'], + self._handle_service_request) + self.server.register_endpoint( + "/machine/services/start", ['POST'], + self._handle_service_request) # Register remote methods self.server.register_remote_method( @@ -41,15 +47,21 @@ class Machine: async def reboot_machine(self): await self._execute_cmd("sudo shutdown -r now") - async def restart_service(self, service_name): - await self._execute_cmd(f'sudo systemctl restart {service_name}') + async def do_service_action(self, action, service_name): + await self._execute_cmd( + f'sudo systemctl {action} {service_name}') - async def _handle_service_restart(self, web_request): + async def _handle_service_request(self, web_request): name = web_request.get('service').lower() + action = web_request.get_endpoint().split('/')[-1] if name == "moonraker": - IOLoop.current().spawn_callback(self.restart_service, name) + if action != "restart": + raise self.server.error( + f"Service action '{action}' not available for moonraker") + IOLoop.current().spawn_callback( + self.do_service_action, action, name) elif name in ALLOWED_SERVICES: - await self.restart_service(name) + await self.do_service_action(action, name) else: raise self.server.error( f"Invalid argument recevied for 'name': {name}")