Răsfoiți Sursa

adei info api

Chuan Miao 9 ani în urmă
părinte
comite
76ff2ab571

+ 20 - 9
applications/katrin/controllers/api.py

@@ -4,24 +4,23 @@ def index():
     return dict(adei=session.adei_sensors, sql=session.sql_fields)
 
 def adei_servers():
-    servers = [s['server'] for s in session.adei_servers]
+    servers = config().select(config.adei_server.ALL)
     return dict(servers=servers)
 
 def adei_groups():
     server = request.get_vars.server
-    groups = [ dict(group=g['db_group'], group_name=g['name']) \
-                for s in session.adei_sensors if s['server'] == server \
-                for g in s['groups'] ]
+    s = config(config.adei_server.server_key==server).select().first()
+    groups = s.adei_group.select()
     return dict(server=server, groups=groups)
 
 def adei_sensors():
     server = request.get_vars.server
     group  = request.get_vars.group
-    for s in session.adei_sensors:
-        if s['server'] == server:
-            for g in s['groups']:
-                if g['db_group'] == group:
-                    sensors = g['sensors']
+    s = config(( config.adei_server.id==config.adei_sensor.server_id ) &\
+               ( config.adei_group.id==config.adei_sensor.group_id ))
+    sensors =  s(( config.adei_server.server_key==server ) & \
+                 ( config.adei_group.db_group==group ) ).\
+                 select(config.adei_sensor.ALL)
     return dict(server=server, group=group, sensors=sensors)
 
 def adei_data():
@@ -151,3 +150,15 @@ def adeiinfo():
         return dict()
     return locals()
 
+def adei_test():
+    from gluon.contrib.hypermedia import Collection
+    rules ={
+        'adei_server': {
+            'GET':{'query':None, 'fields':['id', 'server_key', 'db_host']},
+            'POST':{'query':None, 'fields':['server_key']},
+            'PUT':{'query':None, 'fields':['server_key']},
+            'DELETE':{'query':None}
+        }
+    }
+    return Collection(config, compact=True).process(request, response, rules)
+

+ 5 - 6
applications/katrin/models/config_servers.py → applications/katrin/models/config.py

@@ -1,13 +1,13 @@
 adei_servers = [
 {
-    'server': 'katrin',
-    'host': 'katrin.kit.edu/adei-detector',
+    'server_key': 'katrin',
+    'db_host': 'katrin.kit.edu/adei-detector',
     'db_server': 'detector',
     'db_name': 'katrin'
 },
 {
-    'server': 'aircoils',
-    'host': 'katrin.kit.edu/adei-detector',
+    'server_key': 'aircoils',
+    'db_host': 'katrin.kit.edu/adei-detector',
     'db_server': 'aircoils',
     'db_name': 'aircoils'
 
@@ -21,8 +21,7 @@ sql_servers = [
     'database': 'orca',
     'tables': ['runs', 'machines', 'experiment'] ,
     'field_ignore': [ 
-        'machines.password',
-        'experiment.ratesstr',
+        'machines.password', 'experiment.ratesstr',
     ],
     'field_type_fix': {
         'experiment.ratesstr': 'text',

+ 86 - 0
applications/katrin/models/config_adei.py

@@ -0,0 +1,86 @@
+from adeireader import ADEIReader
+import sqlite3
+
+config = DAL('sqlite://config.storage.sqlite',pool_size=1,check_reserved=['all'])
+
+config.define_table('adei_server',
+        Field('id', 'primary'),
+        Field('server_key', unique=True),
+        Field('db_host'),
+        Field('db_server'),
+        Field('db_name'))
+
+config.define_table('adei_group',
+        Field('id', 'primary'),
+        Field('group_key', unique=True),
+        Field('db_group'),
+        Field('group_name'),
+        Field('server_id', "reference adei_server"))
+
+config.define_table('adei_sensor',
+        Field('id', 'primary'),
+        Field('sensor_key', unique=True),
+        Field('sensor_mask', 'integer'),
+        Field('sensor_uid'),
+        Field('sensor_name'),
+        Field('group_id', 'reference adei_group'),
+        Field('server_id', 'reference adei_server'))
+
+def fetch_group_and_sensor(sk):
+    group_keys = [ s['group_key'] for s in config().select(config.adei_group.group_key) ]
+    sensor_keys = [ s['sensor_key'] for s in config().select(config.adei_sensor.sensor_key) ]
+    ar = session.adei_readers[sk]
+    sid = config.adei_server( server_key=sk ).id
+    for g in ar.query_group():
+        print g
+        gk = sk + '__' + g['db_group']
+        db_group = g['db_group']
+        group_name = g['name']
+        try:
+            config.adei_group.insert(
+                    group_key = gk,
+                    db_group = db_group,
+                    group_name = group_name,
+                    server_id = sid,
+                    server_key = sk)
+        except:
+            print 'record in adei_group already'
+            pass
+        gid = config.adei_group( group_key=gk ).id
+        for s in ar.query_sensor(db_group):
+            print s
+            sensor_mask = s['value']
+            sensor_key = gk+'__'+sensor_mask
+            try:
+                sensor_uid = s['uid']
+            except:
+                sensor_uid = ''
+            try:
+                config.adei_sensor.insert(
+                        sensor_mask=sensor_mask,
+                        sensor_key=sensor_key,
+                        sensor_uid=sensor_uid,
+                        sensor_name=s['name'],
+                        server_id = sid,
+                        group_id = gid)
+            except:
+                print 'record in adei_server already'
+                pass
+
+
+server_keys = [ s['server_key'] for s in config().select(config.adei_server.server_key) ]
+
+if 'adei_readers' not in session.keys():
+    session.adei_readers = {}
+
+for s in adei_servers:
+    if s['server_key'] not in server_keys:
+        config.adei_server.insert(**s)
+        fetch_group_and_sensor(s['server_key'])
+    if s['server_key'] not in session.adei_readers.keys():
+        ar = ADEIReader(s['db_host'], s['db_server'], s['db_name'])
+        session.adei_readers[s['server_key']] = ar
+
+           
+        
+