Gerar dados falsos para testar
This commit is contained in:
113
generator/gen-data.py
Normal file
113
generator/gen-data.py
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
import argparse
|
||||||
|
import random
|
||||||
|
import re
|
||||||
|
import time
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
PAD = re.compile(r"^0?([1-9]\d?)$")
|
||||||
|
NORDIC_7 = (
|
||||||
|
" STAT SP IPHASW D HRMM SECON CODA AMPLIT PERI AZIMU VELO AIN AR TRES W DIS CAZ7"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_event():
|
||||||
|
ts = random.randint(946684800000, 1767225600000)
|
||||||
|
dt = datetime.fromtimestamp(ts / 1e3)
|
||||||
|
line_3 = " OBS: Dados falsos".ljust(79) + "3"
|
||||||
|
stat = generate_station(dt)
|
||||||
|
|
||||||
|
return "\n".join(
|
||||||
|
[
|
||||||
|
gen_line_1(dt),
|
||||||
|
line_3,
|
||||||
|
generate_line6(dt),
|
||||||
|
generate_line_i(dt),
|
||||||
|
NORDIC_7,
|
||||||
|
stat,
|
||||||
|
"\n",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_agency(size: int = 3) -> str:
|
||||||
|
return "".join([chr(random.randint(65, 90)) for _ in range(size)])
|
||||||
|
|
||||||
|
|
||||||
|
def remove_pad(v: str) -> str:
|
||||||
|
aux = PAD.search(v)
|
||||||
|
if aux:
|
||||||
|
return aux.group(0)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
def fmt_date(dt: datetime) -> str:
|
||||||
|
return f"{dt.year} {dt.month:2d}{dt.day:2d} {dt.hour:2d}{dt.minute:2d} {dt.second:2d}.0"
|
||||||
|
|
||||||
|
|
||||||
|
# 1D Lerp
|
||||||
|
def generate_number(lb: float, ub: float, precision: int = 2) -> float:
|
||||||
|
x = random.random()
|
||||||
|
return round(lb * (1.0 - x) + (ub * x), precision)
|
||||||
|
|
||||||
|
|
||||||
|
def gen_line_1(dt: datetime) -> str:
|
||||||
|
lat = generate_number(-90.0, 90.0, 3)
|
||||||
|
long = generate_number(-180.0, 180.0, 3)
|
||||||
|
ev = random.choices(("E", "V", "Q"))[0]
|
||||||
|
depth = generate_number(0.0, 30.0, 1)
|
||||||
|
agency = generate_agency()
|
||||||
|
|
||||||
|
mag = generate_number(1.0, 6.0, 1)
|
||||||
|
|
||||||
|
return (
|
||||||
|
f" {fmt_date(dt)} L{ev}{lat: >7.3f}{long: >8.3f}{depth:>5.1f} {agency} 1 {mag: >4.1f}L{agency}{mag: >4.1f}C{agency}".ljust(
|
||||||
|
79
|
||||||
|
)
|
||||||
|
+ "1"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_line6(dt: datetime) -> str:
|
||||||
|
return f" {dt.strftime('%Y-%m-%d-%H%M-%S')}-FAKE___001".ljust(79) + "6"
|
||||||
|
|
||||||
|
|
||||||
|
def generate_line_i(dt: datetime) -> str:
|
||||||
|
return " " * 57 + f"ID:{dt.strftime('%Y%m%d%H%M%S')} I"
|
||||||
|
|
||||||
|
|
||||||
|
def generate_station(dt: datetime) -> str:
|
||||||
|
st = generate_agency(4)
|
||||||
|
|
||||||
|
return "\n".join(
|
||||||
|
[
|
||||||
|
f" {st} EZ EP {dt.hour:2d}{dt.minute:2d} {dt.second: >5.2f}".ljust(
|
||||||
|
80
|
||||||
|
),
|
||||||
|
f" {st} EZ ES {dt.hour:2d}{dt.minute:2d} {dt.second: >5.2f}".ljust(
|
||||||
|
80
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def main(argv: int):
|
||||||
|
fp = open("falsos.txt", "w", newline="\n")
|
||||||
|
for _ in range(argv):
|
||||||
|
aux = generate_event()
|
||||||
|
fp.write(aux)
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
random.seed(time.time())
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument(
|
||||||
|
"n", action="store", type=int, help="Generates n amount of events"
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.n:
|
||||||
|
main(args.n)
|
||||||
@@ -3,14 +3,13 @@ from typing import Any
|
|||||||
|
|
||||||
from pymongo import MongoClient
|
from pymongo import MongoClient
|
||||||
from pymongo.collection import Collection
|
from pymongo.collection import Collection
|
||||||
|
from pymongo.cursor import Cursor
|
||||||
from pymongo.errors import ConnectionFailure
|
from pymongo.errors import ConnectionFailure
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from utilsv2.log import logger
|
from utilsv2.log import logger
|
||||||
from utilsv2.parser import massage_magnitudes
|
|
||||||
except ModuleNotFoundError:
|
except ModuleNotFoundError:
|
||||||
from log import logger
|
from log import logger
|
||||||
from parser import massage_magnitudes
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -32,8 +31,6 @@ def add_events(
|
|||||||
db = client["main"]
|
db = client["main"]
|
||||||
coll = db[collection]
|
coll = db[collection]
|
||||||
|
|
||||||
data = massage_magnitudes(data)
|
|
||||||
|
|
||||||
_res = coll.insert_many(data)
|
_res = coll.insert_many(data)
|
||||||
|
|
||||||
if _res.acknowledged:
|
if _res.acknowledged:
|
||||||
@@ -65,7 +62,24 @@ def close(client: MongoClient) -> None:
|
|||||||
logger.info("Closed the DB.")
|
logger.info("Closed the DB.")
|
||||||
|
|
||||||
|
|
||||||
|
def query_all(cli: MongoClient, collection: str) -> Any:
|
||||||
|
coll: Collection = cli.main[collection]
|
||||||
|
|
||||||
|
result = coll.find({})
|
||||||
|
|
||||||
|
for doc in result:
|
||||||
|
print(doc)
|
||||||
|
|
||||||
|
|
||||||
|
def filter_query(cli: MongoClient, collection: str, filter_by):
|
||||||
|
coll: Collection = cli.main[collection]
|
||||||
|
|
||||||
|
res = coll.find({""})
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
v = connect("mongodb://localhost:27017")
|
v = connect("mongodb://localhost:27017")
|
||||||
|
|
||||||
|
query_all(v, "quakes")
|
||||||
|
|
||||||
close(v)
|
close(v)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class Mag:
|
|||||||
return f"mag: {self.mag}, type: {self.type}, agency: {self.agency}"
|
return f"mag: {self.mag}, type: {self.type}, agency: {self.agency}"
|
||||||
|
|
||||||
def toJSON(self):
|
def toJSON(self):
|
||||||
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4)
|
json.dumps({"Magnitude": self.mag, "Agency": self.agency})
|
||||||
|
|
||||||
|
|
||||||
def parse_event(event: list[str]) -> evtype:
|
def parse_event(event: list[str]) -> evtype:
|
||||||
@@ -57,7 +57,6 @@ def parse_event(event: list[str]) -> evtype:
|
|||||||
_ret.update(parse_type_i(v))
|
_ret.update(parse_type_i(v))
|
||||||
case _:
|
case _:
|
||||||
pass
|
pass
|
||||||
print(_ret)
|
|
||||||
return _ret
|
return _ret
|
||||||
|
|
||||||
|
|
||||||
@@ -94,10 +93,10 @@ def parse_type_1(lines: list[str]) -> dict[str, Any] | None:
|
|||||||
dt = parse_dt(line[:21])
|
dt = parse_dt(line[:21])
|
||||||
dist_ind = line[21]
|
dist_ind = line[21]
|
||||||
event_id = line[22]
|
event_id = line[22]
|
||||||
lat = float(line[24:31])
|
lat = float(line[23:30])
|
||||||
long = float(line[30:39])
|
long = float(line[30:38])
|
||||||
depth = float(line[38:44])
|
depth = float(line[38:44])
|
||||||
mags = parse_mag(line[56:79])
|
mags = parse_mag(line[55:79])
|
||||||
line1.update(
|
line1.update(
|
||||||
{
|
{
|
||||||
"DateTime": dt,
|
"DateTime": dt,
|
||||||
@@ -111,7 +110,7 @@ def parse_type_1(lines: list[str]) -> dict[str, Any] | None:
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
mags = parse_mag(line[56:79])
|
mags = parse_mag(line[56:79])
|
||||||
line1["Magnitudes"] += mags
|
line1["Magnitudes"].union(mags)
|
||||||
|
|
||||||
return line1
|
return line1
|
||||||
|
|
||||||
@@ -186,9 +185,11 @@ def parse_dt(_text: str, isStation=False) -> datetime | time:
|
|||||||
return dt
|
return dt
|
||||||
|
|
||||||
|
|
||||||
def parse_mag(_text: str) -> list[Mag]:
|
def parse_mag(_text: str) -> dict[str, Mag]:
|
||||||
mags = []
|
mags = {}
|
||||||
for mag in textwrap.wrap(_text, 8):
|
|
||||||
|
for i in range(0, 3):
|
||||||
|
mag = _text[8 * i : 8 * (i + 1) - 1] # split every 8 chars
|
||||||
if not utils.is_empty(mag):
|
if not utils.is_empty(mag):
|
||||||
mags.append(Mag(float(mag[:3]), mag[3], mag[4:]))
|
mags[mag[3]] = {"Magnitude": float(mag[:4]), "Agency": mag[4:]}
|
||||||
return mags
|
return mags
|
||||||
|
|||||||
@@ -2,9 +2,14 @@ import logging
|
|||||||
from io import TextIOWrapper
|
from io import TextIOWrapper
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
try:
|
||||||
from utilsv2 import utils
|
from utilsv2 import utils
|
||||||
from utilsv2.log import logger
|
from utilsv2.log import logger
|
||||||
from utilsv2.nordic import evtype, parse_event, parse_stations_V1, sttype
|
from utilsv2.nordic import evtype, parse_event, parse_stations_V1, sttype
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
import utils
|
||||||
|
from log import logger
|
||||||
|
from nordic import evtype, parse_event, parse_stations_V1, sttype
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -63,15 +68,6 @@ def extract_event(
|
|||||||
return events, ev_stations
|
return events, ev_stations
|
||||||
|
|
||||||
|
|
||||||
def massage_magnitudes(data: list[evtype]) -> list[evtype]:
|
|
||||||
data = data
|
|
||||||
for idx, ev in enumerate(data):
|
|
||||||
for jdx, mag in enumerate(ev["Magnitudes"]):
|
|
||||||
data[idx]["Magnitudes"][jdx] = mag.toJSON()
|
|
||||||
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def parse(fname: str):
|
def parse(fname: str):
|
||||||
_ret = read_file(fname)
|
_ret = read_file(fname)
|
||||||
if not isinstance(_ret, TextIOWrapper):
|
if not isinstance(_ret, TextIOWrapper):
|
||||||
|
|||||||
Reference in New Issue
Block a user