示例#1
0
    def __init__(self, redis_conn, workflow_id, app_id, config, lang='en'):
        """Initialize the minion."""
        Minion.__init__(self, redis_conn, workflow_id, app_id, config)

        self.terminate_proc_queue = multiprocessing.Queue()
        self.execute_process = None
        self.ping_process = None
        self.module = None

        self._state = {}
        self.config = config

        self.transpiler = ScikitLearnTranspiler(config)
        configuration.set_config(self.config)

        self.tmp_dir = self.config.get('config', {}).get('tmp_dir', '/tmp')
        sys.path.append(self.tmp_dir)

        signal.signal(signal.SIGTERM, self._terminate)

        self.mgr = socketio.RedisManager(
            config['juicer']['servers']['redis_url'], 'job_output')

        self.executor = ThreadPoolExecutor(max_workers=1)
        self.job_future = None

        self.scikit_learn_config = config['juicer'].get('scikit_learn', {})

        # self termination timeout
        self.active_messages = 0
        self.self_terminate = True
        self.juicer_listener_enabled = False
        self.current_lang = lang
示例#2
0
def _update_notification_count(config):
    mgr = socketio.RedisManager(config['servers']['redis_url'][:-1],
                                'job_output')
    mgr.emit('notifications',
             data={'unread': _get_number_of_unread_notifications()},
             room='user:' + flask_globals.user.id,
             namespace=NAMESPACE)
示例#3
0
def do_simulated_tasks(sid):
    external_sio = socketio.RedisManager('redis://mq:6379/0', write_only=True)

    for i in range(10):
        external_sio.emit('results', data={'random_number': i}, room=sid)
        time.sleep(1)

    return 'Complete'
示例#4
0
    def __init__(self, redis_conn, workflow_id, app_id, config, lang='en'):
        Minion.__init__(self, redis_conn, workflow_id, app_id, config)

        self.terminate_proc_queue = multiprocessing.Queue()
        self.execute_process = None
        self.ping_process = None
        self.reload_code_process = None
        self.module = None

        self._state = {}
        self.transpiler = SparkTranspiler(config)
        self.config = config
        configuration.set_config(self.config)
        self.juicer_listener_enabled = False

        self.tmp_dir = self.config.get('config', {}).get('tmp_dir', '/tmp')
        sys.path.append(self.tmp_dir)

        self.mgr = socketio.RedisManager(
            config['juicer']['servers']['redis_url'], 'job_output')

        self.executor = ThreadPoolExecutor(max_workers=1)
        self.job_future = None

        # self termination timeout
        self.active_messages = 0
        self.self_terminate = True
        # Errors and messages
        self.MNN000 = ('MNN000', _('Success.'))
        self.MNN001 = ('MNN001', _('Port output format not supported.'))
        self.MNN002 = ('MNN002', _('Success getting data from task.'))
        self.MNN003 = ('MNN003', _('State does not exists, processing app.'))
        self.MNN004 = ('MNN004', _('Invalid port.'))
        self.MNN005 = ('MNN005',
                       _('Unable to retrieve data because a previous error.'))
        self.MNN006 = ('MNN006',
                       _('Invalid Python code or incorrect encoding: {}'))
        self.MNN007 = ('MNN007', _('Job {} was canceled'))
        self.MNN008 = ('MNN008', _('App {} was terminated'))
        self.MNN009 = ('MNN009', _('Workflow specification is missing'))

        # Used in the template file, declared here to gettext detect them
        self.msgs = [
            _('Task running'),
            _('Task completed'),
            _('Task ignored (not used by other task or as an output)')
        ]
        self.current_lang = lang
        # self._build_dist_file()
        signal.signal(signal.SIGTERM, self._terminate)
        signal.signal(signal.SIGINT, self._cleanup)
        self.last_job_id = 0
        self.new_session = False

        self.cluster_options = {}
        self.last_cluster_id = None
        self.DIST_ZIP_FILE = '/tmp/lemonade-lib-pythoni_{}.zip'.format(
            self.app_id)
def xsend_message():
    import random
    mq = socketio.RedisManager()
    mq.emit("my_response", {'data': "HEEEEE_LLOOOO {}".format(random.randint(100, 999))})
    mq.emit("notifications", {'data': "notifications {}".format(random.randint(100, 999))})
    sio = socketio.Client()

    sio.connect('http://localhost:8080')
    sio.emit("notifications", {'data': "XXXX notifications {}".format(random.randint(100, 999))})
示例#6
0
    def wrap_socketio_server():
        import socketio
        from websocket_server.ws_conn import WSConnections

        mgr = socketio.RedisManager("redis://localhost:%s/0" % redis_port)
        sio = socketio.Server(client_manager=mgr, async_mode='eventlet')

        #init
        ws = WSConnections.getInstance(sio)
        ws.init_events()
        app = socketio.Middleware(sio, _app)

        return app
示例#7
0
def create_socket_io_app(_app):
    """
    Creates websocket app
    :param _app: Flask app
    """
    original_emit = socketio.base_manager.BaseManager.emit
    socketio.base_manager.BaseManager.emit = mocked_emit(original_emit, _app)

    socket_io_config = _app.config['STAND_CONFIG']['servers']
    mgr = socketio.RedisManager(socket_io_config['redis_url'], 'job_output')
    sio = socketio.Server(engineio_options={'logger': True},
                          client_manager=mgr,
                          cors_allowed_origins='*',
                          allow_upgrades=True)

    return sio, socketio.Middleware(sio, _app)
示例#8
0
def lib_send_redis_message(message, save_flag=True):
    try:
        # connect to the redis queue
        redis = socketio.RedisManager(config['REDIS_REMOTE_URL'],
                                      channel=config['SOCKET_IO_CHANNEL'],
                                      write_only=True)
        # emit an event
        redis.emit('msg',
                   data=message,
                   namespace=config['SOCKET_IO_NAMESPACE'])
    except:
        logger.error("ERROR! Cannot connect to {}".format(
            config['REDIS_REMOTE_URL']))
        return False

    if (save_flag):
        lib_save_message_history(message)
示例#9
0
    def __init__(self):
        mgr = client_manager = socketio.RedisManager("redis://")
        Payload.max_decode_packets = 500
        self.socketio = socketio.Server(async_mode="gevent",
                                        client_manager=mgr)
        self.app = socketio.WSGIApp(self.socketio)
        self.r = redis.Redis(host='localhost', port=6379, db=0)
        self.connectionlist = {
        }  #json.loads(self.r.get("connectionlist").decode())
        #fill redis
        self.r.set("connectionlist", json.dumps(self.connectionlist))
        self.r.set(
            "image",
            "https://cdna.artstation.com/p/assets/images/images/023/154/550/large/nikolai-lockertsen-f0952e7c-f76f-4899-94f0-a475241af0a3.jpg"
        )
        self.tag = "networking"
        self.sidinfo = {}
        # classes
        self.motd = motd()

        # stuff
        self.tasklist = []  # currently working on
示例#10
0
    def post():
        result, result_code = dict(
            status="ERROR",
            message=gettext('Missing json in the request body')), 400

        if request.json is not None:
            socket_io_config = current_app.config['STAND_CONFIG']['servers']
            mgr = socketio.RedisManager(socket_io_config['redis_url'],
                                        'job_output')
            sio = socketio.Server(engineio_options={'logger': True},
                                  client_manager=mgr,
                                  cors_allowed_origins='*',
                                  allow_upgrades=True)

            sio.emit(event=request.json.get("event", "?"),
                     data=request.json.get("data", {}),
                     room=request.json.get("room", "general"),
                     namespace=request.json.get("namespace", "/stand"))
            result_code = 200
            result = {"status": "OK"}

        return result, result_code
示例#11
0
文件: server.py 项目: yuanbw/juicer
    def __init__(self,
                 config,
                 minion_executable,
                 log_dir='/tmp',
                 config_file_path=None):

        self.minion_support_process = None
        self.new_minion_watch_process = None
        self.start_process = None
        self.minion_status_process = None
        self.state_control = None
        self.minion_watch_process = None

        self.active_minions = {}

        self.config = config
        configuration.set_config(config)
        self.config_file_path = config_file_path
        self.minion_executable = minion_executable
        self.log_dir = log_dir or self.config['juicer'].get('log', {}).get(
            'path', '/tmp')

        signal.signal(signal.SIGTERM, self._terminate)

        self.port_range = list(
            range(*(config['juicer'].get('minion', {}).get(
                'libprocess_port_range', [36000, 36500]))))
        self.advertise_ip = config['juicer'].get(
            'minion', {}).get('libprocess_advertise_ip')

        # Minion requires 3 different ports:
        # 1 for libprocess/Mesos communication
        # 1 for driver port
        # 1 for block manager
        self.port_offset = config['juicer'].get('minion',
                                                {}).get('port_offset', 100)

        self.mgr = socketio.RedisManager(
            config['juicer']['servers']['redis_url'], 'job_output')
示例#12
0
import socketio
import json

from .log import logger
from .dbHelper import r_userTokens, configData
from .utils import getUID
from .user import signout

mgr = socketio.RedisManager("redis://" + configData["redis"]["host"] + ":" +
                            str(configData["redis"]["port"]) + "/" +
                            str(configData["redis"]["websocketsDB"]))
sio = socketio.Server(
    async_mode="gevent_uwsgi",
    cors_allowed_origins="*",
    logger=True,
    engineio_logger=True,
    client_manager=mgr,
)


@sio.event
def connect(sid, environ):
    logger.info("New WS socket connected: " + sid)


@sio.event
def disconnect(sid):
    logger.info("WS socket disconnected: " + sid)


@sio.event
示例#13
0
 def __init__(self):
     mgr = socketio.RedisManager('redis://')
     self.socketio = socketio.Server(client_manager=mgr)
     self.r = redis.Redis(host="localhost", port=6379, db=0)
     self.tag = "events"
示例#14
0
def simulate():
    logging.config.fileConfig('logging_config.ini')
    logger = logging.getLogger(__name__)
    # ap = argparse.ArgumentParser()
    # ap.add_argument('-c', '')
    mgr = socketio.RedisManager(app.config.get('REDIS_URL'), 'job_output')

    statuses = [
        StatusExecution.RUNNING,
        # StatusExecution.CANCELED, StatusExecution.ERROR,
        # StatusExecution.PENDING, StatusExecution.INTERRUPTED,
        StatusExecution.WAITING,
        StatusExecution.COMPLETED
    ]
    while True:
        try:
            _, job_json = redis_store.blpop('queue_start')
            job = json.loads(job_json)
            logger.debug('Simulating workflow %s with job %s',
                         job.get('workflow_id'), job.get('job_id'))

            eventlet.sleep(3)

            for k in ['job_id']:
                if k in job:
                    logger.info('Room for %s', k)
                    room = str(job[k])
                    mgr.emit('update job',
                             data={
                                 'message': random.choice(MESSAGES),
                                 'status': StatusExecution.RUNNING,
                                 'id': job['workflow_id']
                             },
                             room=room,
                             namespace="/stand")

            job_entity = Job.query.get(job.get('job_id'))
            job_entity.status = StatusExecution.RUNNING
            job_entity.finished = datetime.datetime.utcnow()
            db.session.add(job_entity)
            db.session.commit()

            for task in job.get('workflow', {}).get('tasks', []):
                if task['operation']['id'] == 25:  # comment
                    continue

                job_step_entity = JobStep.query.filter(
                    and_(JobStep.job_id == job.get('job_id'),
                         JobStep.task_id == task['id'])).first()

                # Updates task in database
                try:
                    job_step_entity.status = StatusExecution.RUNNING
                    job_step_entity.logs.append(
                        JobStepLog(level='WARNING',
                                   date=datetime.datetime.now(),
                                   message=random.choice(MESSAGES)))
                    db.session.add(job_step_entity)
                    db.session.commit()
                except Exception as ex:
                    logger.error(ex)

                for k in ['job_id']:
                    if k in job:
                        logger.info('Room for %s and task %s', k,
                                    task.get('id'))
                        room = str(job[k])
                        mgr.emit('update task',
                                 data={
                                     'message': random.choice(MESSAGES),
                                     'status': random.choice(statuses[:-2]),
                                     'id': task.get('id')
                                 },
                                 room=room,
                                 namespace="/stand")
                eventlet.sleep(random.randint(2, 5))
                for k in ['job_id']:
                    if k in job:
                        room = str(job[k])
                        mgr.emit('update task',
                                 data={
                                     'message': random.choice(MESSAGES),
                                     'status': StatusExecution.COMPLETED,
                                     'id': task.get('id')
                                 },
                                 room=room,
                                 namespace="/stand")

                # Updates task in database
                try:
                    # Visualizations
                    if task['operation']['id'] in [35, 68, 69, 70, 71]:
                        # import pdb
                        # pdb.set_trace()
                        for k in ['job_id']:
                            room = str(job[k])
                            mgr.emit('task result',
                                     data={
                                         'msg': 'Result generated',
                                         'status': StatusExecution.COMPLETED,
                                         'id': task['id'],
                                         'task': {
                                             'id': task['id']
                                         },
                                         'title': 'Table with results',
                                         'type': 'VISUALIZATION',
                                         'operation': {
                                             'id': task['operation']['id']
                                         },
                                         'operation_id':
                                         task['operation']['id']
                                     },
                                     room=room,
                                     namespace="/stand")
                            #
                            # result = JobResult(task_id=task['id'],
                            #                    title="Table with results",
                            #                    operation_id=task['operation']['id'],
                            #                    type=ResultType.VISUALIZATION, )
                            # logger.info('Result created for job %s', job['job_id'])
                            # job_entity.results.append(result)

                    job_step_entity.status = StatusExecution.COMPLETED
                    job_step_entity.logs.append(
                        JobStepLog(level='WARNING',
                                   date=datetime.datetime.now(),
                                   message=random.choice(MESSAGES)))
                    db.session.add(job_step_entity)
                except Exception as ex:
                    logger.error(ex)

            # eventlet.sleep(5)

            for k in ['job_id']:
                if k in job:
                    logger.info('Room for %s', k)
                    room = str(job[k])
                    mgr.emit('update job',
                             data={
                                 'message': random.choice(MESSAGES),
                                 'status': StatusExecution.COMPLETED,
                                 'finished': job_entity.finished.isoformat(),
                                 'id': job['job_id']
                             },
                             room=room,
                             namespace="/stand")

            if job_entity:
                job_entity.status = StatusExecution.COMPLETED
                db.session.add(job_entity)

            db.session.commit()

        except KeyError as ke:
            logger.error('Invalid json? KeyError: %s', ke)
            raise
        except Exception as ex:
            logger.error(ex.message)
            raise
        logger.info('Simulation finished')
示例#15
0
from flask_socketio import SocketIO
from .models.const import creatives
from .models.user import User
from .libs.utils import now_date
from pyhottop.pyhottop import Hottop
# from libs.hottop_thread import Hottop
import copy
import eventlet
import logging
import os
import random
import socketio
import sys
from redis import Redis

mgr = socketio.RedisManager('redis://' + os.environ.get('REDIS_HOST'))
sio = SocketIO(client_manager=mgr)
login_manager = LoginManager()
mongo = PyMongo()
ht = Hottop()

logger = logging.getLogger("cloud_cafe")
logger.setLevel(logging.DEBUG)
shandler = logging.StreamHandler(sys.stdout)
fmt = '\033[1;32m%(levelname)-5s %(module)s:%(funcName)s():'
fmt += '%(lineno)d %(asctime)s\033[0m| %(message)s'
shandler.setFormatter(logging.Formatter(fmt))
logger.addHandler(shandler)

eventlet.monkey_patch()
示例#16
0
import socketio
import eventlet
eventlet.monkey_patch()
mgr = socketio.RedisManager('redis://socketio-redis:6379/0')
#sio = socketio.Server(cors_allowed_origins='*',async_mode='gevent',client_manager=mgr)

sio = socketio.Server(logger=True,
                      engineio_logger=True,
                      cors_allowed_origins='*',
                      async_mode='eventlet',
                      client_manager=mgr)

app = socketio.WSGIApp(sio)


@sio.event
def connect(sid, environ):
    print('connect ', sid)


@sio.event
def test_message(sid, data):
    print('message ', data)
    sio.emit('message', {'data': 'pong'}, broadcast=True, include_self=True)
    mgr.emit('ping message', data={'foo': 'bar'}, room=sid)
    # sio.emit('my event', {'data': 'foobar'}, room=user_sid)


@sio.event
def ping_message(sid, data):
    print('message ping ', data)
示例#17
0
import traceback
import socketio
import json
import logging
from celery import Celery
from celery.bin import worker

from . import REDIS_URL, UNBABEL_API_KEY, UNBABEL_USERNAME, init_logging
from .unbabel_api import UnbabelApi, UnauthorizedException, BadRequestException
from . import db

LOGGER = logging.getLogger('translator.tasks')

app = Celery('translator', broker=REDIS_URL)
sio = socketio.Server(client_manager=socketio.RedisManager(REDIS_URL),
                      write_only=True)
unbabel = UnbabelApi(username=UNBABEL_USERNAME,
                     api_key=UNBABEL_API_KEY,
                     sandbox=True)


def event(channel, sid, message):
    LOGGER.warning(message)
    sio.emit(channel, message, room=sid)


def status_event(sid, translation):
    event('status', sid, json.dumps(translation.__dict__))


def error_event(sid, error):
示例#18
0
import redis

# r = redis.Redis(
# host='127.0.0.1',
# port='6379',
# password='')

# r.set('ad', 'bar')
# value = r.keys("*")
# print(value)

import socketio
from flask import Flask, render_template


mgr = socketio.RedisManager('redis://')
sio = socketio.Server(client_manager=mgr, async_mode='threading', logger=True, engineio_logger=True)

app = Flask(__name__)
app.wsgi_app = socketio.WSGIApp(sio, app.wsgi_app)

# @sio.event
# def salutations(sid, data):
#     print(f"my event is {sid}, {data}")

def update_driver(driver_id):
    """ Updates one driver """
    print(f"driver-{driver_id} changed!")

@sio.on('position')
def position(sid,driver_id, data):
示例#19
0
文件: app.py 项目: jwaggs/real-socks
# TODO: this crashes in debug
import eventlet
eventlet.monkey_patch()

from flask import Flask, render_template
from flask_socketio import SocketIO, join_room, emit, send, leave_room
import logging
import os
import pickle
import socketio as sio


app = Flask(__name__)
app.config['SECRET_KEY'] = 'TODO:ChangeThisSecret'  # TODO: change
redis_url = 'redis://*****:*****@app.route('/')
def index():
    """Serve the index HTML"""
    return render_template('index.html')


@socketio.on('connect')
def test_connect():
    print('Client connected')
    emit('my response', {'data': 'Connected'})
示例#20
0
def do_revoke(sid, uuid):
    cel.control.revoke(uuid)
    external_sio = socketio.RedisManager('redis://mq:6379/0', write_only=True)
    external_sio.emit('celery task cancelled', data={'uuid': uuid}, room=sid)
    return 'Cancelled'
示例#21
0
import socketio
import rx
#mgr = socketio.RedisManager('redis://socketio-redis:6379')

#mgr = socketio.RedisManager('redis://socketio-redis:6379/0',channel='chat')

mgr = socketio.RedisManager('redis://socketio-redis:6379/0', write_only=True)
import time

def send(val):
    print('sssss')
    #sio.emit('message', {'data': val}, broadcast=True, include_self=True)
    #mgr.emit('message', data={'foo': 'bar'})
    #print(val)

#source = rx.interval(1).subscribe(send)
from datetime import datetime

while True:
    time.sleep(2)
    now = datetime.now()
    current_time = now.strftime("%H:%M:%S")
    mgr.emit('message', data={'time': current_time})
示例#22
0
from django.core.management.base import BaseCommand
import socketio
import eventlet

eventlet.monkey_patch()
mgr = socketio.RedisManager('redis://localhost:6379/0')
sio = socketio.Server(cors_allowed_origins='*',async_mode='eventlet',client_manager=mgr)
app = socketio.WSGIApp(sio)


@sio.event
def connect(sid, environ):
    print('connect ', sid)


@sio.event
def disconnect(sid):
    print('disconnect ', sid)


class Command(BaseCommand):

    def handle(self, *args, **options):
        print('Starting socket server')
        eventlet.wsgi.server(eventlet.listen(('', 5001)), app)
示例#23
0
from flask import Flask, render_template
import sys
import batch

sys.path.append('./config')
from pyredis import Redis
from db import DB
from config import load_config

try:
    db = DB()
    redis = Redis()
    redis_config = load_config()['redis']
    if redis_config['password']:
        manager = socketio.RedisManager('redis://:' +
                                        redis_config['password'] + '@' +
                                        redis_config['host'] + ':' +
                                        str(redis_config['port']))
    else:
        manager = socketio.RedisManager('redis://' + redis_config['host'] +
                                        ':' + str(redis_config['port']))
    queue = []
    sio = socketio.Server(client_manager=manager)
    app = Flask('socketio')
except Exception as e:
    raise e


@sio.on('connect', namespace='/enliple')
def connect(sid, environ):
    logging.debug('connect')
示例#24
0
from bitcoin.messages import msg_block, MsgSerializable
from bitcoin.core import b2lx, lx, uint256_from_str, CBlock
from bitcoin.core.serialize import uint256_from_str, uint256_to_str, uint256_from_compact
from bitcoin.wallet import CBitcoinAddress
from bitcoin.core.script import CScript
from bitcointx.wallet import CBitcoinAddress as TX_CBitcoinAddress
from datetime import datetime, timedelta


if not os.path.exists('/data/explorer/blocks/'):
    os.makedirs('/data/explorer/blocks/')
if not os.path.exists('/data/explorer/chainstate/'):
    os.makedirs('/data/explorer/chainstate')

# connect to the redis queue as an external process
external_sio = socketio.RedisManager('redis://%s' % settings.REDIS_HOST, write_only=True)


def int_to_bytes(i: int, *, signed: bool = False) -> bytes:
    length = (i.bit_length() + 7 + int(signed)) // 8
    return i.to_bytes(length, byteorder='big', signed=signed)

def bytes_to_int(b: bytes, *, signed: bool = False) -> int:
    return int.from_bytes(b, byteorder='big', signed=signed)

def ser_uint256(i):
    return uint256_to_str(i)

class TxIdx(object):
    def __init__(self, blkhash, spentmask=0):
        self.blkhash = blkhash
示例#25
0
 def __init__(self):
     mgr = client_manager = socketio.RedisManager("redis://")
     self.socketio = socketio.Server(client_manager=mgr)
     self.r = redis.Redis(host='localhost', port=6379, db=0)
     self.tag = "modules"
示例#26
0
import eventlet

eventlet.monkey_patch()
import logging
import socketio
import json
from . import tasks, db
from . import REDIS_URL, init_logging

LOGGER = logging.getLogger('translator.api')

sio = socketio.Server(async_mode='eventlet', \
            client_manager=socketio.RedisManager(REDIS_URL), \
            message_queue=REDIS_URL)

app = socketio.WSGIApp(sio,
                       static_files={
                           '/': {
                               'content_type': 'text/html',
                               'filename': 'static/index.html'
                           },
                           '/Index.js': {
                               'content_type': 'application/javascript',
                               'filename': 'static/Index.js'
                           }
                       })


@sio.on('translate')
def message(sid, data):
    LOGGER.info('MESSAGE RECEIVED %s %s ' % (sid, data))
示例#27
0
文件: tasks.py 项目: zdimon/dj-chess
import socketio
from celery import shared_task
from django.conf import settings
mgr = socketio.RedisManager(settings.SOCKET_BROKER_URL, write_only=True)
import json


@shared_task
def update_users_online():
    from .models import UserProfile
    print('Sending update online command!')
    for user in UserProfile.objects.filter(is_online=True):
        for room in user.get_sids():
            print(room)
            mgr.emit('update_online_user',
                     data={"message": "do update!"},
                     room=room)


@shared_task
def update_board(board_id):
    from .models import Board
    from chess.serializers import BoardSerializer
    board = Board.objects.get(pk=board_id)
    print('Sending update board command!')
    try:
        for room in board.agressor.get_sids():
            print(room)
            mgr.emit('update_board',
                     data=BoardSerializer(board, user=board.agressor).data,
                     room=room)
示例#28
0
def do_mp4(sid, uuid):
    external_sio = socketio.RedisManager('redis://mq:6379/0', write_only=True)
    return 'Complete'
示例#29
0
import os
import socketio

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ahome.settings")
manager = socketio.RedisManager('')
sio = socketio.Server(client_manager=manager)