weather-impact
102 строки · 2.9 Кб
1import logging
2import os
3import subprocess
4import sys
5from typing import List
6
7# Constants
8LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
9
10# Set up logging to stdout
11logging.basicConfig(
12level=logging.INFO, format=LOG_FORMAT, handlers=[logging.StreamHandler(sys.stdout)]
13)
14
15
16def get_command_path(command_name: str) -> str:
17"""Return the full path to the command executable."""
18return os.popen(f"which {command_name}").read().strip()
19
20
21def run_command(command: List[str]) -> None:
22"""Execute a command using subprocess and log its output."""
23try:
24result = subprocess.run(command, capture_output=True, text=True)
25logging.info(f"'{command}' output: {result.stdout}")
26if result.stderr:
27logging.error(f"'{command}' error: {result.stderr}")
28except Exception as e:
29logging.error(f"Failed to run '{command}': {e}")
30
31
32def run_polaris_fetch(
33sat_name: str, start_date: str, end_date: str, data_dir_path: str
34) -> None:
35"""Fetch satellite data using Polaris."""
36json_name = f"{sat_name.lower()}_normalized_frames.json"
37cache_dir = os.path.join(data_dir_path, sat_name.lower())
38cache_dir = os.path.abspath(cache_dir)
39
40command = [
41get_command_path("polaris"),
42"fetch",
43"--start_date",
44start_date,
45"--end_date",
46end_date,
47"--cache_dir",
48cache_dir,
49sat_name,
50os.path.join(cache_dir, json_name),
51]
52run_command(command)
53
54
55def run_polaris_learn(sat_name: str, data_dir_path: str) -> None:
56"""Analyze satellite data using Polaris."""
57graph_name = f"{sat_name.lower()}-graph.json"
58cache_dir = os.path.join(data_dir_path, sat_name.lower())
59cache_dir = os.path.abspath(cache_dir)
60
61command = [
62get_command_path("polaris"),
63"learn",
64"--force_cpu",
65"--output_graph_file",
66os.path.join(cache_dir, graph_name),
67os.path.join(cache_dir, f"{sat_name.lower()}_normalized_frames.json"),
68]
69run_command(command)
70
71
72def run_polaris_behave(sat_name: str, data_dir_path: str) -> None:
73"""Analyze satellite behavior using Polaris."""
74input_file = os.path.join(
75data_dir_path, sat_name.lower(), f"{sat_name.lower()}_normalized_frames.json"
76)
77output_file = os.path.join(
78data_dir_path, sat_name.lower(), f"{sat_name.lower()}-anomaly_analysis.json"
79)
80command = [
81get_command_path("polaris"),
82"behave",
83input_file,
84"--output_file",
85output_file,
86]
87run_command(command)
88
89
90def main() -> None:
91sat_name: str = "LightSail-2"
92start_date: str = "2019-07-07"
93end_date: str = "2020-11-15"
94data_dir_path: str = "../data"
95
96run_polaris_fetch(sat_name, start_date, end_date, data_dir_path)
97run_polaris_learn(sat_name, data_dir_path)
98run_polaris_behave(sat_name, data_dir_path)
99
100
101if __name__ == "__main__":
102main()
103