/
merlin-server.py
145 lines (111 loc) · 3.97 KB
/
merlin-server.py
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
143
144
145
from merlin import Merlin, print_color
from sanic import Sanic, response
def print(msg):
print_color('server: %s' % msg, 'green')
app = Sanic(name='Merlin Server')
app.config['RESPONSE_TIMEOUT'] = 60 * 60 * 24 * 7
merlin = None
@app.listener('before_server_start')
async def start(app, loop):
global merlin
merlin = Merlin('172.16.126.78', debug=True)
@app.route('/arm', methods=['PUT'])
def put_arm(request):
print('entering put_arm')
merlin.arm()
return response.text('')
print('leaving put_arm')
@app.route('/start', methods=['PUT'])
async def put_start(request):
print('entering put_start')
nframes = request.json['value']
await merlin.start(nframes)
return response.text('')
print('leaving put_start')
@app.route('/stop', methods=['PUT'])
def put_stop(request):
print('stop')
merlin.stop()
return response.text('')
@app.route('/filename', methods=['PUT'])
def put_filename(request):
filename = request.json['value']
merlin.filename = filename
return response.text('')
@app.route('/energy')
def get_energy(request):
value = float(merlin.get(b'OPERATINGENERGY'))
return response.json({'value': value})
@app.route('/energy', methods=['PUT'])
def put_energy(request):
value = request.json['value']
merlin.set(b'OPERATINGENERGY', value)
return response.text('')
@app.route('/trigger_start')
def get_trigger_start(request):
value = int(merlin.get(b'TRIGGERSTART'))
return response.json({'value': value})
@app.route('/trigger_start', methods=['PUT'])
def put_trigger_start(request):
value = request.json['value']
merlin.set(b'TRIGGERSTART', value)
return response.text('')
@app.route('/acquisition_time')
def get_acquisition_time(request):
value = float(merlin.get(b'ACQUISITIONTIME'))
return response.json({'value': value})
@app.route('/acquisition_time', methods=['PUT'])
def put_acquisition_time(request):
value = request.json['value']
merlin.set(b'ACQUISITIONTIME', value)
return response.text('')
@app.route('/acquisition_period')
def get_acquisition_period(request):
value = float(merlin.get(b'ACQUISITIONPERIOD'))
return response.json({'value': value})
@app.route('/acquisition_period', methods=['PUT'])
def put_acquisition_period(request):
value = request.json['value']
merlin.set(b'ACQUISITIONPERIOD', value)
return response.text('')
@app.route('/num_frames')
def get_num_frames(request):
value = int(merlin.get(b'NUMFRAMESTOACQUIRE'))
return response.json({'value': value})
@app.route('/num_frames', methods=['PUT'])
def put_num_frames(request):
value = request.json['value']
merlin.set(b'NUMFRAMESTOACQUIRE', value)
return response.text('')
@app.route('/num_frames_per_trigger', methods=['GET'])
def get_num_frames_per_trigger(request):
nframes = int(merlin.get(b'NUMFRAMESPERTRIGGER'))
return response.json({'value': nframes})
@app.route('/num_frames_per_trigger', methods=['PUT'])
def put_num_frames_per_trigger(request):
value = request.json['value']
merlin.set(b'NUMFRAMESPERTRIGGER', value)
return response.text('')
@app.route('/continuousrw', methods=['GET'])
def get_continuousrw(request):
gapless = bool(int(merlin.get(b'CONTINUOUSRW')))
return response.json({'value': gapless})
@app.route('/continuousrw', methods=['PUT'])
def put_continuousrw(request):
value = request.json['value']
merlin.set(b'CONTINUOUSRW', int(value))
return response.text('')
@app.route('/counterdepth', methods=['GET'])
def get_counterdepth(request):
depth = int(merlin.get(b'COUNTERDEPTH'))
return response.json({'value': depth})
@app.route('/counterdepth', methods=['PUT'])
def put_counterdepth(request):
value = request.json['value']
merlin.set(b'COUNTERDEPTH', value)
return response.text('')
if __name__ == '__main__':
try:
app.run(host='0.0.0.0', port=8000, workers=1, access_log=False, debug=True, auto_reload=False)
except KeyboardInterrupt:
merlin.process.terminate()