def __init__(self, conn, addr): Thread.__init__(self) print_flush("Pixels :", Mesh.pixels) #Manage adressing procedures Mesh.addressed = not (Mesh.pixels == {}) self.ama_check = 0 self.previous_state = 1 self.model = Model(SchedulerState.get_rows(), SchedulerState.get_cols()) #Communication with mesh network config self.msg = Frame() self.mesh_conn = conn self.mesh_addr = addr self.l = Listen(conn) self.l.start() self.stopped = False #Communication with RabbitMQ config self.channel = None self.connection = None credentials = pika.PlainCredentials( os.environ['RABBITMQ_DEFAULT_USER'], os.environ['RABBITMQ_DEFAULT_PASS']) self.params = pika.ConnectionParameters(host='rabbit', credentials=credentials, heartbeat=0)
def start_forced_fap(fap): SchedulerState.clear_user_app_queue() SchedulerState.set_app_started_at() name = fap['name'] params = fap['params'] app = { 'name': name, 'username': '******', 'userid': '>>>>FORCED<<<<', 'params': fap['params'], 'task_id': start_forced_fap.request.id, 'last_alive': time.time(), 'started_at': datetime.datetime.utcnow().isoformat(), 'is_default': False, 'is_forced': True, 'expire_at': str(datetime.datetime.utcnow() + datetime.timedelta(weeks=52)) } SchedulerState.set_current_app(app) SchedulerState.set_event_lock(False) fap = globals()[name](app['username'], app['userid']) try: fap.run(params=params) return True finally: fap.close() redis.set(SchedulerState.KEY_FORCED_APP, 'False') SchedulerState.set_current_app({})
def vietnam(self): # scalable cols = SchedulerState.get_cols() rows = SchedulerState.get_rows() self.model.set_all('red') for c in range(cols // 2, cols // 2 + 2): self.model.set_pixel(rows // 2, c, name_to_rgb('yellow')) self.model.set_pixel(rows // 2 + 1, c, name_to_rgb('yellow'))
def liechtenstein(self): # scalable rows = SchedulerState.get_rows() cols = SchedulerState.get_cols() for i in range(0, rows // 2): self.model.set_line(i, (0, 0.16, 0.5)) for i in range(rows // 2, rows): self.model.set_line(i, (0.8, 0.05, 0.13))
def ukraine(self): # scalable cols = SchedulerState.get_cols() rows = SchedulerState.get_rows() for i in range(0, rows // 2): self.model.set_line(i, (1, 0.83, 0)) for i in range(rows // 2, rows): self.model.set_line(i, (0, 0.35, 0.74))
def admin_clear_queue(user): if is_admin(user): SchedulerState.stop_app_request(user) SchedulerState.clear_user_app_queue() else: abort(403, "Forbidden Bru") return '', 204
def quit_user_app(user): c_app = SchedulerState.get_current_app() removed = False if is_admin(user) or c_app.get('userid', False) == user['userid']: SchedulerState.stop_app_request(user) removed = True return jsonify(removed=removed)
def tunisia(self): # scalable cols = SchedulerState.get_cols() rows = SchedulerState.get_rows() self.model.set_all('red') for c in range(int(cols / 8 * 3), int(cols / 8 * 6)): self.model.set_pixel(rows // 2, c, (1, 1, 1)) self.model.set_pixel(rows // 2 + 1, c, (1, 1, 1))
def poland(self): # scalable cols = SchedulerState.get_cols() rows = SchedulerState.get_rows() for i in range(0, rows // 2): self.model.set_line(0, name_to_rgb('white')) for i in range(rows // 2, rows): self.model.set_line(i, name_to_rgb('red'))
def morocco(self): # scalable cols = SchedulerState.get_cols() rows = SchedulerState.get_rows() self.model.set_all((0.73, 0.13, 0.16)) for c in range(int(cols / 10 * 5), int(cols / 10 * 6)): for r in range(int(rows / 6 * 3), int(rows / 6 * 4)): self.model.set_pixel(r, c, (0, 0.4, 0.2))
def load_fapps_config(user): # Configure id and name of the apps. if is_admin(user): SchedulerState.set_activated(g.data.get('apps')); return jsonify(success=True) else: return jsonify(success=False)
def disable_frontage(self): SchedulerState.clear_user_app_queue() c_app = SchedulerState.get_current_app() if c_app: self.stop_app(c_app, Fap.CODE_CLOSE_APP, 'The admin disabled Arbalet Frontage')
def japan(self): # scalable rows = SchedulerState.get_rows() cols = SchedulerState.get_cols() self.model.set_all((1, 1, 1)) for r in range(max(1, rows // 4), max(3, int(rows / 4 * 3))): for c in range(max(1, cols // 3), max(3, int(cols / 3 * 2))): self.model.set_pixel(r, c, name_to_rgb('red'))
def china(self): # scalable cols = SchedulerState.get_cols() rows = SchedulerState.get_rows() self.model.set_all('red') for r in range(0, min(2, rows)): for c in map(lambda x: min(x, cols), [1, 2, 4]): self.model.set_pixel(r, c, name_to_rgb('yellow'))
def sweden(self): # scalable cols = SchedulerState.get_cols() rows = SchedulerState.get_rows() self.model.set_all((0, 0.41, 0.66)) for i in range(rows // 2, rows // 2 + 1): self.model.set_line(i, name_to_rgb('yellow')) for i in range(cols // 3, cols // 3 + 2): self.model.set_column(i, name_to_rgb('yellow'))
def post(self, user): name = request.get_json()['name'] params = request.get_json().get('params', {}) expires = SchedulerState.get_expires_value() queued, removed_previous = SchedulerState.start_user_app_request(user['username'], user['userid'], name, params, expires) return jsonify(queued=queued, removed_previous=removed_previous, keep_alive_delay=SchedulerState.DEFAULT_KEEP_ALIVE_DELAY)
def libya(self): # scalable rows = SchedulerState.get_rows() cols = SchedulerState.get_cols() self.model.set_all((0, 0, 0)) for i in range(rows // 3): self.model.set_line(i, (1, 0, 0)) for i in range(int(rows / 3 * 2), rows): self.model.set_line(i, name_to_rgb('darkgreen'))
def stop_current_app_start_next(self, queue, c_app, next_app): SchedulerState.set_event_lock(True) print_flush('## Revoking app [stop_current_app_start_next]') self.stop_app(c_app, Fap.CODE_EXPIRE, 'Someone else turn') # Start app print_flush("## Starting {} [stop_current_app_start_next]".format(next_app['name'])) start_fap.apply_async(args=[next_app], queue='userapp') SchedulerState.wait_task_to_start()
def load_sunrise_config(user): # Configure id and name of the apps. if is_admin(user): SchedulerState.set_day_table(g.data.get('dates')); SchedulerState.get_day_table(); return jsonify(success=True) else: return jsonify(success=False)
def load_general_config(user): # Configure id and name of the apps. if is_admin(user): SchedulerState.set_id(g.data.get('id', '')) SchedulerState.set_name(g.data.get('name', '')) return jsonify(success=True) else: return jsonify(success=False)
def admin_set_settings(user): try: lifetime = int(request.get_json().get('default_lifetime')) except (ValueError, KeyError): return jsonify(done=False) else: SchedulerState.set_default_fap_lifetime(lifetime) return jsonify(done=True)
def post(self, user): if not is_admin(user): abort(403, "Forbidden Bru") app_state_bool = request.get_json().get('app_state', False) SchedulerState.set_default_scheduled_app_state(request.get_json().get('app_name'), app_state_bool) return SchedulerState.get_default_scheduled_apps(serialized=True)
def lituania(self): # scalable rows = SchedulerState.get_rows() cols = SchedulerState.get_cols() for i in range(rows // 3): self.model.set_line(i, name_to_rgb('yellow')) for i in range(rows // 3, int(rows / 3 * 2)): self.model.set_line(i, name_to_rgb('darkgreen')) for i in range(int(rows / 3 * 2), rows): self.model.set_line(i, name_to_rgb('red'))
def luxembourg(self): # scalable rows = SchedulerState.get_rows() cols = SchedulerState.get_cols() for i in range(rows // 3): self.model.set_line(i, name_to_rgb('red')) for i in range(rows // 3, int(rows / 3 * 2)): self.model.set_line(i, name_to_rgb('white')) for i in range(int(rows / 3 * 2), rows): self.model.set_line(i, name_to_rgb('skyblue'))
def netherlands(self): # scalable cols = SchedulerState.get_cols() rows = SchedulerState.get_rows() for i in range(0, rows // 3): self.model.set_line(i, name_to_rgb('firebrick')) for i in range(rows // 3, int(rows / 3 * 2)): self.model.set_line(i, name_to_rgb('white')) for i in range(int(rows / 3 * 2), rows): self.model.set_line(i, name_to_rgb('navy'))
def admin_app_quit(user): if is_admin(user): if (SchedulerState.get_current_app()['name'] == "Snap"): Websock.set_grantUser({'id': "turnoff", 'username': "******"}) removed = SchedulerState.stop_forced_app_request(user) return jsonify(removed=removed) else: abort(403, "Forbidden Bru") return '', 204
def venezuela(self): # scalable cols = SchedulerState.get_cols() rows = SchedulerState.get_rows() for i in range(0, rows // 3): self.model.set_line(i, name_to_rgb('yellow')) for i in range(rows // 3, int(rows / 3 * 2)): self.model.set_line(i, name_to_rgb('navy')) for i in range(int(rows / 3 * 2), rows): self.model.set_line(i, name_to_rgb('firebrick'))
def status(): c_app = SchedulerState.get_current_app() c_app_name = c_app.get('name', '') if c_app else '' return jsonify(is_usable=SchedulerState.usable(), is_forced=SchedulerState.get_forced_app(), current_app=c_app_name, next_on_time=SchedulerState.get_scheduled_on_time().isoformat(), state=SchedulerState.get_enable_state(), current_time=datetime.datetime.now().isoformat())
def yemen(self): # scalable cols = SchedulerState.get_cols() rows = SchedulerState.get_rows() for i in range(0, rows // 3): self.model.set_line(i, name_to_rgb('red')) for i in range(rows // 3, int(rows / 3 * 2)): self.model.set_line(i, name_to_rgb('white')) for i in range(int(rows / 3 * 2), rows): self.model.set_line(i, (0, 0, 0))
def admin_enabled_scheduler(user): state = g.data.get('state', 'on') if state not in ['on', 'off', 'scheduled']: abort(415, "Incorrect state") SchedulerState.set_enable_state(state) return jsonify(is_usable=SchedulerState.usable(), is_forced=SchedulerState.get_forced_app(), state=SchedulerState.get_enable_state(), current_time=datetime.datetime.utcnow().isoformat())