Commit 02bd1f21 authored by Takhir Fakhrutdinov's avatar Takhir Fakhrutdinov

allsky camera

parent 42c89cd2
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -166,6 +166,10 @@ def _create_m2mFile():
from .meteoFile import eop2mFile
return eop2mFile
def _create_allskyFile():
from .meteoFile import allskyFile
return allskyFile
def _create_reqFile():
from .reqFile import reqFile
return reqFile
......@@ -485,4 +489,48 @@ meteo = {
}
factory.register_file('M2M', _create_m2mFile, schema=meteo)
allsky = {
"type": "array",
"items": {
"allOf": [
{
"type": "object",
"required": ["header","meteo"],
"properties": {
"header": {
"type": "object",
"required": ["originator","message_type","message_id"],
"properties": {
"creation_date":{"$ref": "#/$defs/timestamp"},
"originator": {"type": "string"},
"message_type": {"type": "string","enum":["meteo"]},
"message_id": {"type": "string"},
"time_system": {"type": "string","enum":["UTC"]},
"comment": {"type": "string"}
}
},
"meteo":{
"type":"object",
"required": ["metadata","allsky"],
"properties": {
"allsky":{"$ref": "#/$defs/base64"},
"metadata":{
"type": "object",
"required": ["station","serial_number"],
"properties": {
"station": {"type": "string"},
"serial_number": {"type": "string"}
}
}
}
}
}
}
]
},
"$defs": {
"timestamp": {"type":"string","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})([T ](\\d{2}):(\\d{2})(:(\\d{2}(?:\\.\\d+)?))?)?$"},
"base64": {"type":"string","pattern":"^(?=(.{4})*$)[A-Za-z0-9+\\/]*={0,2}$"}
}
}
factory.register_file('ASKY', _create_allskyFile, schema=allsky)
......@@ -67,12 +67,12 @@ class meteoBaseFile(baseFile):
select a.dev,l.v model
from main.t_devattr a
join main.t_attrtypelist l using(atype)
where atype in (40002,50002)
where atype in (40002,50002,60002)
and l.rec = (a.v)::integer
) r0 join (
select a.dev,a.v serial_number
from main.t_devattr a
where atype in (40003,50003)
where atype in (40003,50003,60003)
) r1 using(dev)
where model=$1 and serial_number=$2
""",model,serial_number)
......@@ -217,8 +217,6 @@ class eop2mFile(meteoBaseFile):
:linenos:
:caption: load_data
"""
from collections import namedtuple
logger.info('Загрузка файла...')
await super().load(fd,args)
data = json.load(fd)
......@@ -248,3 +246,55 @@ class eop2mFile(meteoBaseFile):
await self.copy_to_table('t_devmetrix',source=fo,schema_name='xd',delimiter='\t')
class allskyFile(meteoBaseFile):
""" Загрузка данных ЭОП 2М
"""
def __init__(self,*args,**kwargs):
""" Конструктор.
.. literalinclude:: ../../../../fte/lib/libpy/rrdFile.py
:language: python
:lines: 229,238-240
:linenos:
:caption: __init__
"""
super().__init__(*args,**kwargs)
self.dbtype = 'asky'
async def load(self,fd,args):
""" Метод. Загрузка файла.
.. literalinclude:: ../../../../fte/lib/libpy/weaFile.py
:language: python
:lines: 27,36-
:linenos:
:caption: load_data
"""
import base64
logger.info('Загрузка файла...')
await super().load(fd,args)
data = json.load(fd)
fo,devs = io.BytesIO(), set()
self.fid = await self.getfid()
async with self.transaction():
for m in data:
r = m.get('meteo')
if r:
crops = base64.b64decode(r['allsky'])
model,serial_number = r['metadata']['station'],r['metadata']['serial_number']
tm = datetime.fromisoformat(m['header']['creation_date']).replace(microsecond=0)
self.tbeg, self.tend = min(self.tbeg,tm), max(self.tend,tm)
dev = await self.get_device(model,serial_number)
await self.check_priv_device(dev)
devs.add(dev)
night = await self.fetchval("select * from main.devget_night($1,$2)",dev,tm)
await self.execute("select * from template.partition_table('xd.t_allsky'::regclass,$1)",tm)
await self.execute("insert into xd.t_allsky values($1,$2,$3,$4,$5)",self.fid,dev,tm,night,crops)
self.fileattr = dict(devs=list(devs))
self.create_doc()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment