Commit 912ecc8facd9bfd520ad8a34f9439e927da7678a
1 parent
ec3652a1
Exists in
dev
Change location of pyros config file
Showing
7 changed files
with
144 additions
and
5 deletions
Show diff stats
CHANGELOG
1 | +23-11-2022 (AKo): v0.6.8.0 | |
2 | + - Change column order for agents commands views, add color for pending commands, fix width of table | |
3 | + - Change location of pyros config file | |
4 | + | |
1 | 5 | 07-11-2022 (AKo): v0.6.7.0 |
2 | 6 | - Improve agents commands view (add status filter) |
3 | 7 | - Add port configuration for phpmyadmin in docker-compose.yml | ... | ... |
... | ... | @@ -0,0 +1,83 @@ |
1 | +import yaml | |
2 | +import os | |
3 | +import time | |
4 | +import pykwalify.core | |
5 | +from pykwalify.errors import SchemaError | |
6 | + | |
7 | + | |
8 | +class ConfigPyros: | |
9 | + def check_and_return_config(self, yaml_file: str, schema_file: str) -> dict: | |
10 | + """ | |
11 | + Check if yaml_file is valid for the schema_file and return an dictionary of the config file | |
12 | + | |
13 | + Args: | |
14 | + yaml_file (str): Path to the config_file to be validated | |
15 | + schema_file (str): Path to the schema file | |
16 | + | |
17 | + Returns: | |
18 | + dict: dictionary of the config file (with values) | |
19 | + """ | |
20 | + # disable pykwalify error to clean the output | |
21 | + # logging.disable(logging.ERROR) | |
22 | + try: | |
23 | + can_yaml_file_be_read = False | |
24 | + while can_yaml_file_be_read != True: | |
25 | + if os.access(yaml_file, os.R_OK): | |
26 | + can_yaml_file_be_read = True | |
27 | + else: | |
28 | + print( | |
29 | + f"{yaml_file} can't be accessed, waiting for availability") | |
30 | + time.sleep(0.5) | |
31 | + | |
32 | + c = pykwalify.core.Core(source_file=yaml_file, schema_files=[ | |
33 | + self.config_path+"/"+schema_file]) | |
34 | + return c.validate(raise_exception=True) | |
35 | + except SchemaError: | |
36 | + for error in c.errors: | |
37 | + print("Error :", str(error).split(". Path")[0]) | |
38 | + print("Path to error :", error.path) | |
39 | + return None | |
40 | + except IOError: | |
41 | + print("Error when reading the observatory config file") | |
42 | + | |
43 | + def read_and_check_config_file(self, yaml_file: str) -> dict: | |
44 | + """ | |
45 | + Read the schema key of the config file to retrieve schema name and proceed to the checking of that config file | |
46 | + Call check_and_return_config function and print its return. | |
47 | + | |
48 | + Args: | |
49 | + yaml_file (str): path to the config file | |
50 | + Returns: | |
51 | + dict: Dictionary of the config file (with values) | |
52 | + """ | |
53 | + try: | |
54 | + can_config_file_be_read = False | |
55 | + while can_config_file_be_read != True: | |
56 | + | |
57 | + if os.access(yaml_file, os.R_OK): | |
58 | + can_config_file_be_read = True | |
59 | + else: | |
60 | + print( | |
61 | + f"{yaml_file} can't be accessed, waiting for availability") | |
62 | + time.sleep(0.5) | |
63 | + with open(yaml_file, 'r') as stream: | |
64 | + print(f"Reading {yaml_file}") | |
65 | + config_file = yaml.safe_load(stream) | |
66 | + result = self.check_and_return_config( | |
67 | + yaml_file, config_file["schema"]) | |
68 | + if result == None: | |
69 | + print( | |
70 | + "Error when reading and validating config file, please check the errors right above") | |
71 | + exit(1) | |
72 | + return result | |
73 | + | |
74 | + except yaml.YAMLError as exc: | |
75 | + print(exc) | |
76 | + except Exception as e: | |
77 | + print(e) | |
78 | + return None | |
79 | + | |
80 | + def __init__(self, pyros_config_file): | |
81 | + self.config_path = os.path.abspath(os.path.join( | |
82 | + os.environ.get("DJANGO_PATH"), "../../../config/pyros//")) | |
83 | + self.pyros_config = self.read_and_check_config_file(pyros_config_file) | ... | ... |
... | ... | @@ -0,0 +1,14 @@ |
1 | +schema: schema_pyros_config.yml | |
2 | +general: | |
3 | + logo: logo_pyros.png | |
4 | + color_theme: sienna | |
5 | + nb_element_per_page: 20 | |
6 | +USR: | |
7 | + nb_element_per_page: 10 | |
8 | +SCP: ~ | |
9 | +OCF: ~ | |
10 | +ENV: | |
11 | + time_history: 2 | |
12 | + time_before_plot: 10 | |
13 | + | |
14 | + | |
0 | 15 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,31 @@ |
1 | +type: map | |
2 | +mapping: | |
3 | + schema: | |
4 | + type: str | |
5 | + required: True | |
6 | + general: | |
7 | + type: map | |
8 | + required: True | |
9 | + mapping: | |
10 | + logo: | |
11 | + type: str | |
12 | + required: True | |
13 | + color_theme: | |
14 | + type: str | |
15 | + required: True | |
16 | + nb_element_per_page: | |
17 | + type: int | |
18 | + required: True | |
19 | + USR: | |
20 | + type: any | |
21 | + SCP: | |
22 | + type: any | |
23 | + OCF: | |
24 | + type: any | |
25 | + ENV: | |
26 | + type: map | |
27 | + mapping: | |
28 | + time_history: | |
29 | + type: int | |
30 | + time_before_plot: | |
31 | + type: int | ... | ... |
pyros.py
... | ... | @@ -82,6 +82,7 @@ AGENTS = { |
82 | 82 | "AgentImagesProcessor_tnc_up1": "../../../privatedev/plugin/agent", |
83 | 83 | "agentBasic": "agent", |
84 | 84 | "AgentTriton": "agent", |
85 | + "AgentMCO":"agent", | |
85 | 86 | } |
86 | 87 | # AGENTS = ["agentX", "webserver", "monitoring", "majordome", "scheduler", "alert_manager"] |
87 | 88 | # AGENTS = ["all", "webserver", "monitoring", "majordome", "scheduler", "alert"] |
... | ... | @@ -828,12 +829,16 @@ def start(agent: str, configfile: str, observatory: str, unit: str, computer_hos |
828 | 829 | "pykwalify package (required for obsconfig class) installation failed") |
829 | 830 | if configfile: |
830 | 831 | log.debug("With config file" + configfile) |
832 | + # os.environ["pyros_config_file"] = os.path.join(os.path.abspath( | |
833 | + # PYROS_DJANGO_BASE_DIR), "../../../config/pyros/", configfile) | |
831 | 834 | os.environ["pyros_config_file"] = os.path.join(os.path.abspath( |
832 | - PYROS_DJANGO_BASE_DIR), "../../../config/pyros/", configfile) | |
835 | + PYROS_DJANGO_BASE_DIR), "../../../private/config/pyros/", configfile) | |
833 | 836 | else: |
834 | 837 | configfile = 'config_pyros.yml' |
838 | + # os.environ["pyros_config_file"] = os.path.join(os.path.abspath( | |
839 | + # PYROS_DJANGO_BASE_DIR), "../../../config/pyros/", configfile) | |
835 | 840 | os.environ["pyros_config_file"] = os.path.join(os.path.abspath( |
836 | - PYROS_DJANGO_BASE_DIR), "../../../config/pyros/", configfile) | |
841 | + PYROS_DJANGO_BASE_DIR), "../../../private/config/pyros/", configfile) | |
837 | 842 | |
838 | 843 | logo_name = ConfigPyros( |
839 | 844 | os.environ["pyros_config_file"]).pyros_config["general"]["logo"] | ... | ... |
src/core/pyros_django/scientific_program/views.py
... | ... | @@ -58,10 +58,10 @@ def index_scientific_program(request): |
58 | 58 | # the date of today shift through the time line |
59 | 59 | if previous_period: |
60 | 60 | temp = today - previous_period.start_date |
61 | - date_diff_today_end_of_property = temp.days / 12.5 | |
61 | + date_diff_today_end_of_property = temp.days * 0.85 | |
62 | 62 | else: |
63 | 63 | temp = today - current_period.start_date |
64 | - date_diff_today_end_of_property = temp.days / 12.5 + 15 | |
64 | + date_diff_today_end_of_property = (temp.days / 8) + 15 | |
65 | 65 | CAN_VALIDATE_SP = request.session.get("role") in ("Admin","Unit-PI","Unit-board") and sp_to_be_validated |
66 | 66 | CAN_EVALUATE_SP = request.session.get("role") in ("Admin","TAC") and sp_to_be_evaluated |
67 | 67 | CAN_SUBMIT_SP = request.session.get("role") in ("Admin","Observer") and does_next_period_exist |
... | ... | @@ -842,7 +842,9 @@ def create_period(request): |
842 | 842 | |
843 | 843 | past_periods = [] |
844 | 844 | active_period = Period.objects.exploitation_period() |
845 | - periods = Period.objects.all().order_by("-start_date").exclude(id=active_period.id) | |
845 | + periods = Period.objects.all().order_by("-start_date") | |
846 | + if active_period: | |
847 | + periods.exclude(id=active_period.id) | |
846 | 848 | for period in periods: |
847 | 849 | if active_period != None: |
848 | 850 | past_periods.append(period) | ... | ... |