forked from rdemaria/pytimber
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpytimber.py
More file actions
143 lines (124 loc) · 4.24 KB
/
pytimber.py
File metadata and controls
143 lines (124 loc) · 4.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import os, glob, time
import time
import jpype
import numpy as np
"""
http://abwww.cern.ch/ap/dist/accsoft/cals/accsoft-cals-extr-client/PRO/build/dist/accsoft-cals-extr-client-nodep.jar
"""
_moddir=os.path.dirname(__file__)
_jar=os.path.join(_moddir,'accsoft-cals-extr-client-nodep.jar')
if not jpype.isJVMStarted():
libjvm=jpype.getDefaultJVMPath()
jpype.startJVM(libjvm,'-Djava.class.path=%s'%_jar)
else:
print "Warning jpype started"
#defs
cern=jpype.JPackage('cern')
org =jpype.JPackage('org')
java =jpype.JPackage('java')
ServiceBuilder=cern.accsoft.cals.extr.client.service.ServiceBuilder
DataLocationPreferences=cern.accsoft.cals.extr.domain.core.datasource.DataLocationPreferences
VariableDataType=cern.accsoft.cals.extr.domain.core.constants.VariableDataType
Timestamp=java.sql.Timestamp
null=org.apache.log4j.varia.NullAppender()
org.apache.log4j.BasicConfigurator.configure(null);
def toTimeStamp(t):
if type(t) is str:
return Timestamp.valueOf(t)
else:
sec=int(t)
nanos=int((t-sec)*1e9)
#print sec*1000
tt=Timestamp(long(sec*1000))
#tt.setNanos(nanos)
return tt
source_dict={'mdb': DataLocationPreferences.MDB_PRO,
'ldb': DataLocationPreferences.LDB_PRO,
'all': DataLocationPreferences.MDB_AND_LDB_PRO}
def toStringList(myArray):
myList = java.util.ArrayList()
for s in myArray:
myList.add(s)
return myList
class LoggingDB(object):
def __init__(self,appid='LHC_MD_ABP_ANALYSIS',clientid='BEAM_PHYSICS',source='mdb'):
loc=source_dict[source]
self._builder=ServiceBuilder.getInstance(appid,clientid,loc)
self._md=self._builder.createMetaService()
self._ts=self._builder.createTimeseriesService()
self.tree=Hierarchy('root',None,None,self._md)
def search(self,pattern):
types=VariableDataType.ALL
vvv=self._md.getVariablesOfDataTypeWithNameLikePattern(pattern,types)
return vvv.toString()[1:-1].split(', ')
def get(self,pattern,t1,t2):
ts1=toTimeStamp(t1)
ts2=toTimeStamp(t2)
types=VariableDataType.ALL
vvv=self._md.getVariablesOfDataTypeWithNameLikePattern(pattern,types)
out={}
for v in vvv:
jvar=vvv.getVariable(v)
res=self._ts.getDataInTimeWindow(jvar,ts1,ts2)
data=[]
datatype=res.getVariableDataType().toString()
for tt in res:
ts=tt.getStamp().fastTime/1000.+tt.getStamp().getNanos()*1e-9
if datatype=='VECTORNUMERIC':
val=np.array(tt.getDoubleValues())
elif datatype=='NUMERIC':
val=tt.getDoubleValue()
else:
val=tt
data.append((ts,val))
out[v]=zip(*data)
return out
# def __dir__(self):
# return []
def clean_name(s):
if s[0].isdigit():
s='_'+s
out=[]
for ss in s:
if ss in ' _;><':
out.append('_')
else:
out.append(ss)
return ''.join(out)
class Hierarchy(object):
def __init__(self,name,obj,src,varsrc):
self.name=name
self.obj=obj
self.varsrc=varsrc
if src is not None:
self.src=src
def _get_childs(self):
if self.obj is None:
objs=self.src.getHierachies(1)
else:
objs=self.src.getChildHierarchies(self.obj)
return dict([(clean_name(hh.hierarchyName),hh) for hh in objs])
def __getattr__(self,k):
if k=='src':
self.src=self.varsrc.getAllHierarchies()
return self.src
elif k=='_dict':
self._dict=self._get_childs()
return self._dict
else:
return Hierarchy(k,self._dict[k],self.src,self.varsrc)
def __dir__(self):
return sorted(self._dict.keys())
def __repr__(self):
if self.obj is None:
return "<Top Hierarchy>"
else:
name=self.obj.getHierarchyName()
desc=self.obj.getDescription()
return "<%s: %s>"%(name,desc)
def get_vars(self):
if self.obj is not None:
vvv=self.varsrc.getVariablesOfDataTypeAttachedToHierarchy(self.obj,VariableDataType.ALL)
return vvv.toString()[1:-1].split(', ')
else:
return []