SW/ControlSW/Archive/Dirigent/Support/json_status4remote.py

import json
import os.path as op
from subprocess import call
from time import strftime, sleep

basepath = '/dev/shm/golem/0'


def write2file(fname, value):
    with open(fname, 'w') as f:
        f.write(str(value))


def catfile(fname_rel2basepath, default=None):
    fname = op.join(basepath, fname_rel2basepath)
    try:
        with open(fname) as f:
            content = f.read()
    except IOError:
        return default
    try:
        return int(content)
    except ValueError:
        try:
            return float(content)
        except ValueError:
            return content.strip()


def main():
    while op.exists(basepath):
        call('scp golem@vacuum:/dev/shm/pressure_chamber_mPa /dev/shm')
        current_data = dict(
                time=strftime("%H:%M:%S"),
                U_Bt=catfile('UBt')),
                U_CD=catfile('UCD')),
                p_ch=catfile('pressure_chamber_mPa'),
                tokamak_state=catfile('tokamak_state', default='idle'),
                )
        if current_data['tokamak_state'] != 'idle':
            current_data['discharge_params'] = dict(
                    UBt=catfile('target_UBt'),
                    Ucd=catfile('target_UCD'),
                    pressure=catfile('target_pressure'),
                    comment=catfile('precomment'),
                    gas=catfile('working_gas'),
                    preionization=catfile('preion'),
                    shot_no=catfile('ShotNo'),
                    )
        json_str = json.dumps(current_data)
        write2file(op.join(basepath, 'golem_status.json'), json_str)
        sleep(1)