|
1 | 1 | from queue import Queue
|
2 |
| -from glouton.infrastructure.satnogNetworkClient import SatnogNetworkClient |
3 | 2 | from glouton.shared.logger import logger
|
| 3 | +from glouton.shared import dateHelper |
| 4 | +from glouton.workers.pageScanWorker import PageScanWorker |
| 5 | +from glouton.shared import threadHelper |
| 6 | +from glouton.infrastructure.satnogNetworkClient import SatnogNetworkClient |
4 | 7 |
|
5 | 8 |
|
6 | 9 | class ObservationRepo:
|
7 | 10 | def __init__(self, cmd, repos):
|
8 | 11 | self.OBSERVATION_URL = 'observations/'
|
9 |
| - self.__client = SatnogNetworkClient() |
10 | 12 | self.__repos = repos
|
11 | 13 | self.__cmd = cmd
|
12 | 14 | self.__threads = []
|
13 | 15 |
|
14 | 16 | def extract(self):
|
15 |
| - params = self.__create_request_params() |
16 |
| - page = 1 |
17 |
| - while True: |
18 |
| - r = self.__client.get_from_base( |
19 |
| - self.OBSERVATION_URL, params) |
20 |
| - if r.status_code != 200: |
21 |
| - break |
22 |
| - |
23 |
| - logger.Info('scanning page...' + params['page']) |
24 |
| - self.__read_page(r.json(), self.__cmd.start_date, self.__cmd.end_date) |
25 |
| - page += 1 |
26 |
| - params['page'] = str(page) |
27 |
| - |
| 17 | + client = SatnogNetworkClient() |
| 18 | + diff_days = dateHelper.diff_days( |
| 19 | + self.__cmd.start_date, self.__cmd.end_date) |
| 20 | + if diff_days < 8: |
| 21 | + # no thread needed |
| 22 | + url_params = self.__url_param_builder( |
| 23 | + self.__cmd.start_date, self.__cmd.end_date) |
| 24 | + pageScanner = PageScanWorker( |
| 25 | + client, self.__cmd, self.__repos, self.OBSERVATION_URL, url_params, 1) |
| 26 | + pageScanner.scan() |
| 27 | + else: |
| 28 | + threads = [] |
| 29 | + job = 1 |
| 30 | + for from_datetime, to_datetime in dateHelper.split_date(self.__cmd.start_date, self.__cmd.end_date, 4): |
| 31 | + print(str(from_datetime) + " " + str(to_datetime)) |
| 32 | + url_params = self.__url_param_builder( |
| 33 | + from_datetime, to_datetime) |
| 34 | + pageScanner = PageScanWorker( |
| 35 | + client, self.__cmd, self.__repos, self.OBSERVATION_URL, url_params, job) |
| 36 | + t = threadHelper.create_thread(pageScanner.scan) |
| 37 | + threads.append(t) |
| 38 | + job += 1 |
| 39 | + |
| 40 | + threadHelper.wait(threads) |
28 | 41 | print('\ndownloading started (Ctrl + C to stop)...\t~( ^o^)~')
|
29 | 42 | self.__create_workers_and_wait()
|
30 | 43 |
|
31 | 44 | def __create_workers_and_wait(self):
|
32 | 45 | for repo in self.__repos:
|
33 | 46 | self.__threads.extend(repo.create_worker())
|
34 |
| - while self.__is_one_thread_alive(): |
35 |
| - for t in self.__threads: |
36 |
| - # let's control to main thread every seconds (in order to be able to capture Ctrl + C if needed) |
37 |
| - t.join(1) |
38 |
| - |
39 |
| - def __is_one_thread_alive(self): |
40 |
| - for thread in self.__threads: |
41 |
| - if thread.is_alive(): |
42 |
| - return True |
43 |
| - |
44 |
| - return False |
45 |
| - |
46 |
| - def __read_page(self, observations, start_date, end_date): |
47 |
| - for observation in observations: |
48 |
| - for repo in self.__repos: |
49 |
| - repo.register_command( |
50 |
| - observation, start_date, end_date) |
| 47 | + threadHelper.wait(self.__threads) |
51 | 48 |
|
52 |
| - def __create_request_params(self): |
| 49 | + def __url_param_builder(self, start_date, end_date): |
53 | 50 | return {'satellite__norad_cat_id': self.__cmd.norad_id,
|
54 |
| - 'ground_station': self.__cmd.ground_station_id, |
55 |
| - 'start': self.__cmd.start_date.isoformat(), |
56 |
| - 'end': self.__cmd.end_date.isoformat(), |
57 |
| - 'vetted_status': self.__cmd.observation_status, |
58 |
| - 'vetted_user': self.__cmd.user, |
59 |
| - 'transmitter_uuid': self.__cmd.transmitter_uuid, |
60 |
| - 'transmitter_mode': self.__cmd.transmitter_mode, |
61 |
| - 'transmitter_type': self.__cmd.transmitter_type, |
62 |
| - 'page': '1', |
63 |
| - 'format': 'json'} |
| 51 | + 'ground_station': self.__cmd.ground_station_id, |
| 52 | + 'start': start_date.isoformat(), |
| 53 | + 'end': end_date.isoformat(), |
| 54 | + 'vetted_status': self.__cmd.observation_status, |
| 55 | + 'vetted_user': self.__cmd.user, |
| 56 | + 'transmitter_uuid': self.__cmd.transmitter_uuid, |
| 57 | + 'transmitter_mode': self.__cmd.transmitter_mode, |
| 58 | + 'transmitter_type': self.__cmd.transmitter_type, |
| 59 | + 'page': '1', |
| 60 | + 'format': 'json'} |
0 commit comments