aboutsummaryrefslogtreecommitdiffstats
path: root/moon_manager/moon_manager/__main__.py
diff options
context:
space:
mode:
Diffstat (limited to 'moon_manager/moon_manager/__main__.py')
-rw-r--r--moon_manager/moon_manager/__main__.py234
1 files changed, 231 insertions, 3 deletions
diff --git a/moon_manager/moon_manager/__main__.py b/moon_manager/moon_manager/__main__.py
index 4fed8d10..ee8ea46f 100644
--- a/moon_manager/moon_manager/__main__.py
+++ b/moon_manager/moon_manager/__main__.py
@@ -1,4 +1,232 @@
-from moon_manager.server import create_server
+# Software Name: MOON
-server = create_server()
-server.run()
+# Version: 5.4
+
+# SPDX-FileCopyrightText: Copyright (c) 2018-2020 Orange and its contributors
+# SPDX-License-Identifier: Apache-2.0
+
+# This software is distributed under the 'Apache License 2.0',
+# the text of which is available at 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+# or see the "LICENSE" file for more details.
+
+
+import logging
+import sys
+import os
+import subprocess # nosec
+from moon_utilities import auth_functions
+from moon_manager.api import configuration
+from moon_utilities.auth_functions import init_db
+from moon_manager import daemon
+import hug.interface
+
+LOGGER = logging.getLogger("moon.manager")
+configuration.init_logging()
+
+_conf = configuration.get_configuration()
+_conf["logging"]["loggers"]["moon"]["level"] = "WARNING"
+configuration.set_configuration(_conf)
+
+
+@hug.cli("start_manager")
+def start_manager():
+ """ start the manager """
+ pid_filename = _conf["management"]["pid_file"]
+ _command = ["gunicorn", "moon_manager.server:__hug_wsgi__", "--threads", "5",
+ "--bind", "0.0.0.0:8000", "-D", "-p", pid_filename]
+ subprocess.Popen(_command, stdout=subprocess.PIPE, close_fds=True) # nosec
+
+
+@hug.cli("stop_manager")
+def stop_manager():
+ """ stop the manager """
+ pid_filename = _conf["management"]["pid_file"]
+ with open(pid_filename, 'r') as pid_file:
+ try:
+ pid = int(pid_file.read())
+ except ValueError:
+ LOGGER.error("The pid found in {} is not valid".format(pid_filename))
+ return
+
+ os.kill(pid, 15)
+
+
+@hug.cli("start_web")
+def start_web():
+ """ start the web gui """
+ dist = _conf["dashboard"]["root"]
+ port = _conf["dashboard"]["port"]
+ pid_filename = _conf["dashboard"]["pid_filename"]
+ os.chdir(dist)
+ _command = ["serve", "-l", str(port)]
+ web_gui_proc = subprocess.Popen(_command, stdout=subprocess.PIPE, close_fds=True) # nosec
+ with open(pid_filename, 'w') as f:
+ f.write(str(web_gui_proc.pid))
+
+
+@hug.cli("stop_web")
+def stop_web():
+ """ stop the web gui """
+ pid_filename = _conf["dashboard"]["pid_filename"]
+ with open(pid_filename, 'r') as pid_file:
+ try:
+ pid = int(pid_file.read())
+ except ValueError:
+ LOGGER.error("The pid found in {} is not valid".format(pid_filename))
+ return
+
+ os.kill(pid, 15)
+
+
+@hug.cli("start_all")
+def start_all():
+ """ start the manager and the auto-update service """
+ start_manager()
+ daemon.run()
+
+
+@hug.cli("stop_all")
+def stop_all():
+ """ stop the manager and the auto-update service """
+ stop_manager()
+ daemon.stop()
+
+
+def run(command=None):
+ if len(sys.argv) > 1:
+ if not command:
+ command = sys.argv[1]
+ # Note: delete the command argument because Hug CLI system read it
+ sys.argv.pop(1)
+ init_db(configuration.get_configuration("management").get("token_file"))
+
+ if command == "conf":
+ configuration.get_configuration.interface.cli()
+ elif command == "db":
+ configuration.init_database.interface.cli()
+ elif command == "start_manager":
+ start_manager.interface.cli()
+ elif command == "stop_manager":
+ stop_manager.interface.cli()
+ elif command == "start_gui":
+ start_web.interface.cli()
+ elif command == "stop_gui":
+ stop_web.interface.cli()
+ elif command == "start_daemon":
+ daemon.run.interface.cli()
+ elif command == "stop_daemon":
+ daemon.stop.interface.cli()
+ elif command == "start_all":
+ start_all.interface.cli()
+ elif command == "stop_all":
+ stop_all.interface.cli()
+ elif command == "users":
+ from moon_manager.api import users
+ users.UsersAPI.cli()
+ elif command == "import":
+ configuration.import_json.interface.cli()
+ elif command == "slaves":
+ from moon_manager.api import slave
+ slave.SlavesAPI.cli()
+ elif command == "status":
+ from moon_manager.api import status
+ status.status.interface.cli()
+ elif command == "models":
+ from moon_manager.api import models
+ models.ModelsAPI.cli()
+ elif command == "pdp":
+ from moon_manager.api import pdp
+ pdp.PDPAPI.cli()
+ elif command == "policies":
+ from moon_manager.api import policy
+ policy.PoliciesAPI.cli()
+ elif command == "subjects":
+ from moon_manager.api import perimeter
+ perimeter.SubjectsAPI.cli()
+ elif command == "objects":
+ from moon_manager.api import perimeter
+ perimeter.ObjectsAPI.cli()
+ elif command == "actions":
+ from moon_manager.api import perimeter
+ perimeter.ActionsAPI.cli()
+ elif command == "subject_categories":
+ from moon_manager.api import meta_data
+ meta_data.SubjectCategoriesAPI.cli()
+ elif command == "object_categories":
+ from moon_manager.api import meta_data
+ meta_data.ObjectCategoriesAPI.cli()
+ elif command == "action_categories":
+ from moon_manager.api import meta_data
+ meta_data.ActionCategoriesAPI.cli()
+ elif command == "subject_data":
+ from moon_manager.api import data
+ data.SubjectDataAPI.cli()
+ elif command == "object_data":
+ from moon_manager.api import data
+ data.ObjectDataAPI.cli()
+ elif command == "action_data":
+ from moon_manager.api import data
+ data.ActionDataAPI.cli()
+ elif command == "subject_assignments":
+ from moon_manager.api import assignments
+ assignments.SubjectAssignmentsAPI.cli()
+ elif command == "object_assignments":
+ from moon_manager.api import assignments
+ assignments.ObjectAssignmentsAPI.cli()
+ elif command == "action_assignments":
+ from moon_manager.api import assignments
+ assignments.ActionAssignmentsAPI.cli()
+ elif command == "meta_rules":
+ from moon_manager.api import meta_rules
+ meta_rules.MetaRulesAPI.cli()
+ elif command == "rules":
+ from moon_manager.api import rules
+ rules.RulesAPI.cli()
+ elif command == "tests":
+ from moon_manager.api import checks
+ checks.ChecksAPI.cli()
+ elif command == "attrs":
+ from moon_manager.api import attributes
+ attributes.AttrsAPI.cli()
+ else:
+ LOGGER.critical("Unknown command {}".format(command))
+ else:
+ # TODO: update the command management by using argparse
+ print("""Possible commands are:
+ - conf
+ - db
+ - start_manager
+ - stop_manager
+ - start_gui
+ - stop_gui
+ - start_daemon
+ - stop_daemon
+ - start_all
+ - stop_all
+ - users
+ - import
+ - slaves
+ - models
+ - pdp
+ - policies
+ - subject_data
+ - object_data
+ - action_data
+ - subjects
+ - objects
+ - actions
+ - subject_categories
+ - object_categories
+ - action_categories
+ - subject_assignments
+ - object_assignments
+ - action_assignments
+ - meta_rules
+ - rules
+ - tests
+ - attrs
+ """)
+
+
+if __name__ == "__main__":
+ run()