source: ammosreader/sample_scripts/import_signal.py@ dbcb255

AmmosSource guix
Last change on this file since dbcb255 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
RevLine 
[bfab5ea]1import sys
2import re
3import sqlite3
4import argparse
[4180d6a]5import numpy as np
6from datetime import datetime
[bfab5ea]7from pathlib import Path
[4180d6a]8from pymongo import MongoClient
[bfab5ea]9from ammosreader.AmmosIFReader import AmmosIFReader
[6808525]10from ammosreader.PPDWReader import PPDWReader
[bfab5ea]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
[4180d6a]21source = args.source.upper()
[bfab5ea]22code = args.code.upper()
23signal_number = args.signal_number
24input_dir = Path(args.input_dir)
25sqlite3_file = Path(args.output_file)
26
[4180d6a]27if not re.match('[A-Z0-9]{2}', source):
28 print("Source identifier", source, "invalid")
29 sys.exit()
30
[bfab5ea]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
[4180d6a]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)
[bfab5ea]65
[4180d6a]66#ammos_if_reader = AmmosIFReader(str(iqdw_file))
67#ammos_if_reader.read_all_frames_left()
[94f7c24]68# for each_frame in ammos_if_reader.container.global_frames:
69# print(each_frame)
[6808525]70
71ppdw_reader = PPDWReader(ppdw_file)
72ppdw_reader.read_all_frames_left()
[4180d6a]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
[1d0974d]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.