source: ammosreader/sample_scripts/import_signal.py@ 276d0aa

AmmosSource guix
Last change on this file since 276d0aa was 1d0974d, checked in by Enrico Schwass <ennoausberlin@…>, 3 years ago

better import scripts added

  • Property mode set to 100644
File size: 3.2 KB
Line 
1import sys
2import re
3import sqlite3
4import argparse
5import numpy as np
6from datetime import datetime
7from pathlib import Path
8from pymongo import MongoClient
9from ammosreader.AmmosIFReader import AmmosIFReader
10from ammosreader.PPDWReader import PPDWReader
11
12parser = argparse.ArgumentParser()
13parser.add_argument('-s', '--source', required=True, help='specify source for given signal')
14parser.add_argument('-i', '--input-dir', required=True, help='specify source directory')
15parser.add_argument('-o', '--output-file', required=True, help='specify sqlite3 database file')
16parser.add_argument('-n', '--signal-number', required=True, help='specify number for signal')
17parser.add_argument('-c', '--code', required=True, help='specify code for signal')
18
19args = parser.parse_args()
20
21source = args.source.upper()
22code = args.code.upper()
23signal_number = args.signal_number
24input_dir = Path(args.input_dir)
25sqlite3_file = Path(args.output_file)
26
27if not re.match('[A-Z0-9]{2}', source):
28 print("Source identifier", source, "invalid")
29 sys.exit()
30
31if not re.match('[A-Z][0-9]{3}[A-Z]', code):
32 print("ELINT-Code incorrect")
33 sys.exit(1)
34
35if not re.match('[0-9]{4}', signal_number):
36 print("Signal number incorrect")
37 sys.exit(1)
38
39if not input_dir.is_dir():
40 print("Input dir invalid")
41 sys.exit(1)
42
43dir_name = input_dir.name
44
45files_inside = [each for each in (input_dir.iterdir()) if (each.suffix in ['.idx', '.iqdw', '.ppdw'] and each.stem == dir_name)]
46
47if len(files_inside) != 3:
48 print(".idx, .iqdw or .ppdw file missing in", input_dir)
49 sys.exit(1)
50
51iqdw_file = (input_dir / input_dir.stem).with_suffix('.iqdw')
52ppdw_file = (input_dir / input_dir.stem).with_suffix('.ppdw')
53idx_file = (input_dir / input_dir.stem).with_suffix('.idx')
54
55#if not sqlite3_file.is_file():
56# print("Sqlite3 database file not found at", sqlite3_file)
57# sys.exit(1)
58
59# try:
60# connection = sqlite3.connect(str(sqlite3_file))
61# cursor = connection.cursor()
62# except Exception:
63# print("Can not connect to database file", str(sqlite3_file))
64 # sys.exit(1)
65
66#ammos_if_reader = AmmosIFReader(str(iqdw_file))
67#ammos_if_reader.read_all_frames_left()
68# for each_frame in ammos_if_reader.container.global_frames:
69# print(each_frame)
70
71ppdw_reader = PPDWReader(ppdw_file)
72ppdw_reader.read_all_frames_left()
73
74client = MongoClient('hackathon.kid.local', 27017)
75
76database = client['ELINT']
77ts = (ppdw_reader.container.start_time() - np.datetime64('1970-01-01T00:00:00')) / np.timedelta64(1, 's')
78time_tuple = datetime.utcfromtimestamp(ts).timetuple()
79julian_date_string = str(time_tuple.tm_year)[2:] + str(time_tuple.tm_yday).zfill(3)
80code_collection = database[code]
81year_collection = code_collection[str(time_tuple.tm_year)]
82source_collection = year_collection[source]
83
84json_representation = ppdw_reader.container.to_json()
85json_representation['SIGNALNUMBER'] = signal_number
86json_representation['SOURCEFILE'] = str(ppdw_file)
87source_collection.insert_one(json_representation)
88
89# for each in ppdw_reader.container.signals:
90# each_json = each.to_json()
91# each_json['SIGNALNUMBER'] = signal_number
92# each_json['JULIANDATE'] = julian_date_string
93# each_json['SOURCEFILE'] = str(ppdw_file)
94# source_collection.insert_one(each_json)
Note: See TracBrowser for help on using the repository browser.