コード例 #1
0
ファイル: celery-consume.py プロジェクト: mishunika/openlab
    def handle_message(self, body, message):
        print('Received message: {0!r}'.format(body))
        submission_id = body['args'][0]
        test_f, sol_f, lang = get_test_and_solution(submission_id)

        docker = Docker()
        test = open('/app/evaluator_tests/' + test_f)
        solution = open('/app/evaluator_submissions/' + sol_f)
        out = docker.run(lang, test, solution)
        metadata = json.loads(out)
        try:
            if metadata['score']:
                status = 'P'
            else:
                status = 'F'

            score = metadata['score']
        except KeyError:
            status = 'F'
            score = 0

        if update_submission(submission_id, score, out, status):
            message.ack()
コード例 #2
0
class Modulator:
    def __init__(self):
        self.config = Config()
        self.util = Utility()
        self.docker = Docker()

    def _load_configuration_dict(self, node):
        return self.util._load_json(node)

    def _get_players(self):
        socketio.emit('players', {'players': self.config.players})

    def _set_parameters(self, nc):
        d = {}
        for n in range(int(nc['node_counts'])):
            d[n] = self._load_configuration_dict(n)
        socketio.emit('parms', d)

    def _filter(self, k):
        def walk(k):
            with Config().tsfiles.open("r") as f:
                ts = [
                    line.rstrip('\n') for line in f
                    if k['name'].lower() in line.lower()
                ]
                ts.sort()
            return ts

        socketio.emit('report_filter', {'node': k['node'], 'ts': walk(k)})

    def _watch(self):
        cnts = self.config.nodecounts
        docker_state = ['0' for i in range(cnts)]
        state = [path(f"modulator.playing.{b}").exists() for b in range(cnts)]
        for b in range(cnts):
            d = self._load_configuration_dict(str(b))
            docker_state[b] = d['docker']
        socketio.emit('report_watch', {
            'state': state,
            'docker_state': docker_state
        })
        for i, b in enumerate(state):
            if b:
                player = f"player{i+1}"
                socketio.emit(
                    f"{player}_name",
                    {player: path(f"modulator.playing.{i}").read_text()})

    def _get_mediainfo(self, ts):
        cmd = ("mediainfo --Output=\"General;%OverallBitRate%\""
               f" \"{ts['filename']}\"")
        rate = str(self.util._execute(cmd)).strip()
        if len(rate) > 0:
            res = int(rate)
            if res > 0:
                if res > (4 * 10**7):
                    res = 23052768
                socketio.emit('report_mediainfo', {'playrate': res})

    def _docker_state(self, d):
        n = self.util._load_json(d['node'])
        n.update({'docker': d['docker']})
        self.util._dump_json(d['node'], n)

    def _set_overtime(self, ot):
        n = self.util._load_json(ot['node'])
        n.update({'ot': ot['ot']})
        self.util._dump_json(ot['node'], n)

    def _play(self, n):
        n = json.loads(n)
        slot, docker, rf = n["slot"], n["docker"], n['rf']
        cmd = (f"{self.config.modhome}/ModulatorConsole "
               f"dvb-t "
               f"-r {self.config.ipaddr} "
               f"--slot {slot} "
               f"--playback play "
               f"--mode loop "
               f"--file \"{n['file']}\" "
               f"--bw {n['bw']} "
               f"--const {n['const']} "
               f"--coderate {n['coderate']} "
               f"--guard {n['guard']} "
               f"--tx {n['tx']} "
               f"--cell-id {n['cellid']} "
               f"--playrate {n['playrate']} "
               f"--rf {int(rf) * 10**6} ")
        if int(docker):
            print("docker is enabled")
            result = self.docker.run(int(n['slot']))
            print('docker result:', result)
            socketio.emit('report_docker_start', {
                'status': result,
                'slot': slot
            })
        else:
            res = self.util._execute(cmd)
        path(f"modulator.playing.{slot}").write_text(n["player"])
        self.util._dump_json(slot, n)
        socketio.emit(
            'response',
            {'status': ['PLAYING',
                        int(n['slot']), n['player'], n['docker']]})

    def _stop(self, n):
        n = json.loads(n)
        slot = n["slot"]
        cmd = (f"{self.config.modhome}/ModulatorConsole "
               f"dvb-t "
               f"-r {self.config.ipaddr} "
               f"--slot {n['slot']} "
               f"--playback stop ")
        d = self.util._load_json(slot)
        docker = d['docker']
        if int(docker):
            result = self.docker.stop(n)
            print('docker result:', result)
            d.update({'docker': '0'})
            self.util._dump_json(slot, d)
            socketio.emit('report_docker_stop', {
                'status': result,
                'slot': slot
            })
        res = self.util._execute(cmd)
        path(f"modulator.playing.{n['slot']}").unlink()
        socketio.emit('response',
                      {'status': ['STOPPED', int(n['slot']), '', 0]})
コード例 #3
0
import os
from docker import Docker
from docker import Repl

docker = Docker('logging-example')
repl = Repl(docker)

try:
    volume_name = 'logging-example'
    docker.volumeCreate(['--driver', 'local', volume_name])
    docker.run([
        '--name', 'plath', '-d', '--mount',
        f'type=volume,src={volume_name},dst=/data',
        'dockerinaction/ch4_writer_a'
    ])
    some_data = docker.run([
        '--rm', '--mount', f'type=volume,src={volume_name},dst=/data',
        'alpine:latest', 'head', '/data/logA'
    ])
    print(f'Did we get data?\n{some_data}')
    log_a_path = docker.volumeInspect(
        ['--format', '"{{json .Mountpoint}}"', volume_name])
    print(f'Logging file source path:\n{log_a_path}')
    repl.cmdloop('Logging...')
except Exception as err:
    print(f'Error running logging example\n{err}')
    docker.cleanup()
コード例 #4
0
ファイル: ch3_nginx.py プロジェクト: tbgdn/dockerinaction
import os
from docker import Docker
from docker import Repl

config_src = os.path.abspath('resources\\ch3_nginx.conf')
config_dest = '/etc/nginx/conf.d/default.conf'

log_src = os.path.abspath('resources\\ch3_nginx.log')
log_dest = '/var/log/nginx/custom.host.access.log'

docker = Docker('dia-nginx')
repl = Repl(docker)

try:
    docker.run([
        '-d', '--name', 'diaweb', '--mount',
        f'type=bind,src={config_src},dst={config_dest},readonly=true',
        '--mount', f'type=bind,src={log_src},dst={log_dest}', '-p', '80:80',
        'nginx:latest'
    ])
    repl.cmdloop('Running nginx...')
except Exception as err:
    print('Error running nginx:\n{0}'.format(err))
    docker.cleanup()