def test_boss_workers_sequence(self): worker1 = Worker(1, 'w1', '') worker2 = Worker(1, 'w2', '') worker3 = Worker(1, 'w3', '') _workers = [worker1, worker3, worker2] for worker in _workers: self.boss.add_worker(worker) self.assertTrue(self.boss.workers == _workers)
def start_worker(self, image, tenant, worker_id): ch = WorkerChannel() # start an actor executor container and wait for a confirmation that image was pulled. worker_dict = run_worker(image, ch.name, worker_id) worker = Worker(tenant=tenant, **worker_dict) print( "worker started successfully, waiting on ack that image was pulled..." ) result = ch.get() if result.get('status') == 'error': # there was a problem pulling the image; put the actor in an error state: msg = "got an error back from the worker. Message: {}", format( result) print(msg) if 'msg' in result: raise SpawnerException(message=result['msg']) else: raise SpawnerException( message="Internal error starting worker process.") elif result['value']['status'] == 'ok': print("received ack from worker.") return ch, result['reply_to'], worker else: msg = "Got an error status from worker: {}. Raising an exception.".format( str(result)) print(msg) raise SpawnerException(msg)
def start_worker(self, image, tenant, worker_id): ch = SpawnerWorkerChannel(worker_id=worker_id) # start an actor executor container and wait for a confirmation that image was pulled. worker_dict = run_worker(image, worker_id) worker_dict['ch_name'] = WorkerChannel.get_name(worker_id) worker = Worker(tenant=tenant, **worker_dict) logger.info( "worker started successfully, waiting on ack that image was pulled..." ) result = ch.get() logger.debug( "Got response back from worker. Response: {}".format(result)) if result.get('status') == 'error': # there was a problem pulling the image; put the actor in an error state: msg = "Got an error back from the worker. Message: {}", format( result) logger.info(msg) if 'msg' in result: raise SpawnerException(message=result['msg']) else: logger.error( "Spawner received invalid message from worker. 'msg' field missing. Message: {}" .format(result)) raise SpawnerException( message="Internal error starting worker process.") elif result['value']['status'] == 'ok': logger.debug("received ack from worker.") return ch, result['reply_to'], worker else: msg = "Got an error status from worker: {}. Raising an exception.".format( str(result)) logger.error( "Spawner received an invalid message from worker. Message: ". format(result)) raise SpawnerException(msg)
def get(self, actor_id): logger.debug("top of GET /actors/{}/workers for tenant {}.".format( actor_id, g.tenant)) dbid = Actor.get_dbid(g.tenant, actor_id) try: Actor.from_db(actors_store[dbid]) except KeyError: logger.debug("did not find actor: {}.".format(actor_id)) raise ResourceError("No actor found with id: {}.".format(actor_id), 404) try: workers = Worker.get_workers(dbid) except WorkerException as e: logger.debug( "did not find workers for actor: {}.".format(actor_id)) raise ResourceError(e.msg, 404) result = [] for id, worker in workers.items(): worker.update({'id': id}) try: w = Worker(**worker) result.append(w.display()) except Exception as e: logger.error( "Unable to instantiate worker in workers endpoint from description: {}. " .format(worker)) return ok(result=result, msg="Workers retrieved successfully.")
def add_worker(): try: id = int(request.form.get('worker_id')) name = request.form.get('worker_name') id_card = request.form.get('id_card_no') age = int(request.form.get('age')) sex = request.form.get('sex') tel = request.form.get('telephone') address = request.form.get('address') salary = int(request.form.get('salary')) type = request.form.get('worker_type') user_id = session['user_id'] agent = Worker.query.filter(Worker.worker_id == user_id).first() workshop_id = agent.workshop_id worker = Worker(worker_id=id, name=name, id_card_NO=id_card, age=age, sex=sex, contart_info=tel, address=address, salary=salary, work_type=type, workshop_id=workshop_id) db.session.add(worker) db.session.commit() return render_template('agent/agent_add.html', success=True, msg="添加成功~") except: db.session.rollback() return render_template('agent/agent_add.html', success=False, msg="添加失败,请确保输入信息无误~")
def make_new_worker(amz_dict, session): worker = Worker(workerid=amz_dict['workerId'], assignmentid=amz_dict['assignmentId'], hitid=amz_dict['hitId'], list_id=amz_dict['list']) session.add(worker) session.commit() return worker
def render(self): print("===Add===") if not self._tempWorker: name = input("\nName: ") age = input("Age: ") self._tempWorker = Worker(name, age, "") print("\nAdd {0}? (y/n)".format(self._tempWorker.name))
def start_worker(self, image, tenant, actor_id, worker_id): ch = SpawnerWorkerChannel(worker_id=worker_id) # start an actor executor container and wait for a confirmation that image was pulled. attempts = 0 while True: try: worker_dict = run_worker(image, actor_id, worker_id) except DockerError as e: logger.error("Spawner got a docker exception from run_worker; Exception: {}".format(e)) if 'read timeout' in e.message: logger.info("Exception was a read timeout; trying run_worker again..") time.sleep(5) attempts = attempts + 1 if attempts > 20: msg = "Spawner continued to get DockerError for 20 attempts. Exception: {}".format(e) logger.critical(msg) raise SpawnerException(msg) continue else: logger.info("Exception was NOT a read timeout; quiting on this worker.") # delete this worker from the workers store: try: self.kill_worker(actor_id, worker_id) except WorkerException as e: logger.info("Got WorkerException from delete_worker(). " "worker_id: {}" "Exception: {}".format(worker_id, e)) raise SpawnerException(message="Unable to start worker; error: {}".format(e)) break worker_dict['ch_name'] = WorkerChannel.get_name(worker_id) worker = Worker(tenant=tenant, **worker_dict) logger.info("worker started successfully, waiting on ack that image was pulled...") result = ch.get() logger.debug("Got response back from worker. Response: {}".format(result)) if result.get('status') == 'error': # there was a problem pulling the image; put the actor in an error state: msg = "Got an error back from the worker. Message: {}",format(result) logger.info(msg) if 'msg' in result: raise SpawnerException(message=result['msg']) else: logger.error("Spawner received invalid message from worker. 'msg' field missing. Message: {}".format(result)) raise SpawnerException(message="Internal error starting worker process.") elif result['value']['status'] == 'ok': logger.debug("received ack from worker.") return ch, result['reply_to'], worker else: msg = "Got an error status from worker: {}. Raising an exception.".format(str(result)) logger.error("Spawner received an invalid message from worker. Message: ".format(result)) raise SpawnerException(msg)
def handle_signup_worker(): """ Registra un trabajador para incluirlo en la DB""" data = request.get_json() if data is None: raise APIException( "You need to specify the request body as a json object", status_code=400) new_worker = Worker( init_date=data['init_date'], Consultor=data['Consultor'], candidate=data['candidate'], cedula=data['cedula'], status=data['status'], phone_number=data['phone_number'], email=data['email'], catchment_source=data['catchment_source'], managment=data['managment'], vacant=data['vacant'], Observations=data['Observations'], interview_date=data['interview_date'], actual_charge=data['actual_charge'], company=data['company'], sector=data['sector'], coin=data['coin'], basic_salary=data['basic_salary'], variable_salary=data['variable_salary'], cesta_ticket=data['cesta_ticket'], Profit_Days=data['Profit_Days'], vacations=data['vacations'], Vacation_Bonus=data['Vacation_Bonus'], Factor=data['Factor'], Estimated_annual_package=data['Estimated_annual_package'], Production_bonus=data['Production_bonus'], Transport_bonus=data['Transport_bonus'], Savings_Bank=data['Savings_Bank'], food_bags=data['food_bags'], parking_payment=data['parking_payment'], partial_HCM_Emp_Family=data['partial_HCM_Emp_Family'], Vehicle_insurance=data['Vehicle_insurance'], life_insurance=data['life_insurance'], dinning_room=data['dinning_room'], full_HCM_Emp_Family=data['full_HCM_Emp_Family']) db.session.add(new_worker) db.session.commit() if new_worker: return new_worker.serialize(), 201
def get_or_make_worker(amz_dict, session): try: worker = session.query(Worker).filter_by( workerid=amz_dict['workerId']).one() worker.list_id = amz_dict['list'] session.commit() return worker except NoResultFound: worker = Worker(workerid=amz_dict['workerId'], assignmentid=amz_dict['assignmentId'], hitid=amz_dict['hitId'], list_id=amz_dict['list']) session.add(worker) session.commit() return worker
def forget_password(): email = request.json.get('email', None) if not email or email == '': return None worker = Worker() worker.email = email worker = Worker.query.filter_by(email=email).first() if not worker: return jsonify({"msg": "This email is not registered"}), 404 token = generate_confirmation_token(worker.email) print(token) confirm_url = 'http://localhost:3000/confirmation/' + token html = render_template('email_confirmation.html', confirm_url=confirm_url) subject = "Por favor, Confirmar su email." sendMail("Por favor, Confirmar su email.", '', '', worker.email, html) return jsonify({"success": "Email send successfully"}), 200
def get(self, actor_id, worker_id): logger.debug("top of GET /actors/{}/workers/{}.".format(actor_id, worker_id)) id = Actor.get_dbid(g.tenant, actor_id) try: Actor.from_db(actors_store[id]) except KeyError: logger.debug("Did not find actor: {}.".format(actor_id)) raise ResourceError("No actor found with id: {}.".format(actor_id), 404) try: worker = Worker.get_worker(id, worker_id) except WorkerException as e: logger.debug("Did not find worker: {}. actor: {}.".format(worker_id, actor_id)) raise ResourceError(e.msg, 404) # worker is an honest python dictionary with a single key, the id of the worker. need to # convert it to a Worker object worker.update({'id': worker_id}) w = Worker(**worker) return ok(result=w.display(), msg="Worker retrieved successfully.")
def worker_login(): if request.method == "GET": return render_template("worker_login.html") else: name = request.form.get("name") workerid = request.form.get("workerid") password1 = request.form.get("password1") password2 = request.form.get("password2") if not Worker.query.filter(Worker.workerid == workerid): return "工号已经被注册" if password1 != password2: return "两次输入的密码不一致" newworker = Worker(name=name, workerid=workerid, password=password1) db.session.add(newworker) db.session.commit() return redirect("worker")
def post(self): logging.debug("Start Class WorkerList / method post") args = parser.parse_args() worker_add = Worker(department_key=args['department_key'], worker_name=args['worker_name'], birthday=args['birthday'], salary=args['salary']) db.session.add(worker_add) try: db.session.commit() except Exception as ex: return Response(f'interval {ex!r}', status=500) # workers_list = {'add_id': worker_add.id, # 'department_key': worker_add.department_key, # 'worker_name': worker_add.worker_name, # 'birthday': str(worker_add.birthday), # 'salary': worker_add.salary} workers_list = get_all_department() return Response(json.dumps(workers_list), status=200)
def register(): email = request.json.get('email') name = request.json.get('name') password = request.json.get('password') if not email: return jsonify({"error": "Email is required"}), 422 if not name: return jsonify({"error": "name is required"}), 422 if not password: return jsonify({"error": "Password is required"}), 422 worker = Worker.query.filter_by(email=email).first() if worker: return jsonify({"error": "This email already exist"}), 422 worker = Worker() worker.email = email worker.name = name worker.password = bcrypt.generate_password_hash(password) db.session.add(worker) db.session.commit() if bcrypt.check_password_hash(worker.password, password): access_token = create_access_token(identity=worker.email) data = {"access_token": access_token, "worker": worker.serialize()} return jsonify(data), 200
def insert_in_db(insert_id): if request.method == 'POST': if insert_id == '1': try: id = int(request.form.get('worker_id')) name = request.form.get('worker_name') id_card = request.form.get('id_card_no') age = int(request.form.get('age')) sex = request.form.get('sex') tel = request.form.get('telephone') address = request.form.get('address') salary = int(request.form.get('salary')) type = request.form.get('worker_type') workshop_id = int(request.form.get('workshop_id')) worker = Worker(worker_id=id, name=name, id_card_NO=id_card, age=age, sex=sex, contart_info=tel, address=address, salary=salary, work_type=type, workshop_id=workshop_id) db.session.add(worker) db.session.commit() return render_template('BOSS/insert.html', success=True, msg="添加成功~") except: db.session.rollback() return render_template('BOSS/insert.html', success=False, msg="输入有误,添加失败~") elif insert_id == '2': try: id = int(request.form.get('order-num')) company = request.form.get('company') date = request.form.get('order_data') delivery_date = request.form.get('delivery_date') order_state = request.form.get('order_state') order = Order(order_num=id, company=company, order_date=date, delivery_data=delivery_date, delivery_state=order_state) db.session.add(order) db.session.commit() return render_template('BOSS/insert.html', success=True, msg="添加成功~") except: db.session.rollback() return render_template('BOSS/insert.html', success=False, msg="输入有误,添加失败~") elif insert_id == '3': try: workshop_id = int(request.form.get('workshop_id')) director_id = int(request.form.get('director_id')) tel = request.form.get('telephone') workshop = Workshop(workshop_id=workshop_id, director_id=director_id, telephone=tel) db.session.add(workshop) db.session.commit() return render_template('BOSS/insert.html', success=True, msg="添加成功~") except: db.session.rollback() return render_template('BOSS/insert.html', success=False, msg="输入有误,添加失败~") elif insert_id == '4': try: company_name = request.form.get('company-name') name = request.form.get('name') tel = request.form.get('telephone') address = request.form.get('address') cooperation = Cooperation(company=company_name, contact_info=tel, name=name, address=address) db.session.add(cooperation) db.session.commit() return render_template('BOSS/insert.html', success=True, msg="添加成功~") except: db.session.rollback() return render_template('BOSS/insert.html', success=False, msg="输入有误,添加失败~") elif insert_id == '5': try: product_id = int(request.form.get('product-id')) product_name = request.form.get('product-name') price = int(request.form.get('price')) reward = int(request.form.get('reward')) output = int(request.form.get('output')) product = Cooperation(product_id=product_id, product_name=product_name, price=price, reward=reward, output=output) db.session.add(product) db.session.commit() return render_template('BOSS/insert.html', success=True, msg="添加成功~") except: db.session.rollback() return render_template('BOSS/insert.html', success=False, msg="输入有误,添加失败~") elif insert_id == '6': try: warehouse_id = int(request.form.get('warehouse-id')) worker_id = int(request.form.get('worker-id')) tel = request.form.get('telephone') warehouse = Warehouse(warehouse_id=warehouse_id, worker_id=worker_id, telephone=tel) db.session.add(warehouse) db.session.commit() return render_template('BOSS/insert.html', success=True, msg="添加成功~") except: db.session.rollback() return render_template('BOSS/insert.html', success=False, msg="输入有误,添加失败~") else: pass
def start_worker(self, image, tenant, actor_id, worker_id, client_id, client_access_token, client_refresh_token, ch, api_server, client_secret): # start an actor executor container and wait for a confirmation that image was pulled. attempts = 0 # worker = get_worker(worker_id) # worker['status'] = PULLING_IMAGE Worker.update_worker_status(actor_id, worker_id, PULLING_IMAGE) try: logger.debug("Worker pulling image {}...".format(image)) pull_image(image) except DockerError as e: # return a message to the spawner that there was an error pulling image and abort # this is not necessarily an error state: the user simply could have provided an # image name that does not exist in the registry. This is the first time we would # find that out. logger.info("worker got a DockerError trying to pull image. Error: {}.".format(e)) raise e logger.info("Image {} pulled successfully.".format(image)) # Done pulling image # Run Worker Container while True: try: Worker.update_worker_status(actor_id, worker_id, CREATING_CONTAINER) logger.debug('spawner creating worker container') worker_dict = run_worker( image, actor_id, worker_id, client_id, client_access_token, client_refresh_token, tenant, api_server, client_secret ) logger.debug(f'finished run worker; worker dict: {worker_dict}') except DockerError as e: logger.error("Spawner got a docker exception from run_worker; Exception: {}".format(e)) if 'read timeout' in e.message: logger.info("Exception was a read timeout; trying run_worker again..") time.sleep(5) attempts = attempts + 1 if attempts > 20: msg = "Spawner continued to get DockerError for 20 attempts. Exception: {}".format(e) logger.critical(msg) # todo - should we be calling kill_worker here? (it is called in the exception block of the else below) raise SpawnerException(msg) continue else: logger.info("Exception was NOT a read timeout; quiting on this worker.") # delete this worker from the workers store: try: self.kill_worker(actor_id, worker_id) except WorkerException as e: logger.info("Got WorkerException from delete_worker(). " "worker_id: {}" "Exception: {}".format(worker_id, e)) raise SpawnerException(message="Unable to start worker; error: {}".format(e)) break logger.debug('finished loop') worker_dict['ch_name'] = WorkerChannel.get_name(worker_id) # if the actor is not already in READY status, set actor status to READY before worker status has been # set to READY. # it is possible the actor status is already READY because this request is the autoscaler starting a new worker # for an existing actor. actor = Actor.from_db(actors_store[actor_id]) if not actor.status == READY: try: Actor.set_status(actor_id, READY, status_message=" ") except KeyError: # it is possible the actor was already deleted during worker start up; if # so, the worker should have a stop message waiting for it. starting subscribe # as usual should allow this process to work as expected. pass # finalize worker with READY status worker = Worker(tenant=tenant, **worker_dict) logger.info("calling add_worker for worker: {}.".format(worker)) Worker.add_worker(actor_id, worker) ch.put('READY') # step 4 logger.info('sent message through channel')
def make_data(db): from models import Department, Worker, WorkCommand db.create_all() _commit = (lambda *objs: commit(db, *objs)) d_a = Department(name='A') d_b = Department(name='B') d_c = Department(name='C') _commit(d_a, d_b, d_c) workers = [ Worker(name='Noah', department=d_a, age=random.randrange(18, 61)), Worker(name='Liam', department=d_a, age=random.randrange(18, 61)), Worker(name='Jacob', department=d_a, age=random.randrange(18, 61)), Worker(name='Mason', department=d_a, age=random.randrange(18, 61)), Worker(name='William', department=d_a, age=random.randrange(18, 61)), Worker(name='Ethan', department=d_a, age=random.randrange(18, 61)), Worker(name='Michael', department=d_b, age=random.randrange(18, 61)), Worker(name='Alexander', department=d_b, age=random.randrange(18, 61)), Worker(name='Jayden', department=d_b, age=random.randrange(18, 61)), Worker(name='Daniel', department=d_c, age=random.randrange(18, 61)), Worker(name='Sophia', department=d_c, age=random.randrange(18, 61)), Worker(name='Emma', department=d_c, age=random.randrange(18, 61)), Worker(name='Olivia', department=d_c, age=random.randrange(18, 61)), Worker(name='Isabella', department=d_c, age=random.randrange(18, 61)), Worker(name='Ava', department=d_c, age=random.randrange(18, 61)), Worker(name='Mia', department=d_c, age=random.randrange(18, 61)), Worker(name='Emily', department=d_c, age=random.randrange(18, 61)), Worker(name='Abigail', department=d_c, age=random.randrange(18, 61)), Worker(name='Madison', department=d_c, age=random.randrange(18, 61)), Worker(name='Elizabeth', department=d_c, age=random.randrange(18, 61)), ] _commit(*workers) work_commands = [] for worker in workers: for i in xrange(random.randrange(1, 559)): quantity = random.randrange(1, 21) today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) # last six month created = today - timedelta(random.randrange(1, 186)) work_commands.append( WorkCommand(worker=worker, quantity=quantity, created=created)) _commit(*work_commands)
def setUp(self): self.boss = Boss(1, 'Kola', 'Noname') self.worker = Worker(1, 'Ivan', 'Noname', self.boss)
def test_boss_workers_capacity(self): self.assertTrue(len(self.boss.workers) == 0) self.boss.add_worker(Worker(1, 'Petro', '')) self.assertTrue(len(self.boss.workers) > 0)
def test_boss_workers_appending(self): self.assertEqual(0, len(self.boss.workers)) self.boss.add_worker(Worker(1, 'Petro', '')) self.boss.add_worker(None) self.boss.add_worker(Worker(1, 'Petro', '')) self.assertEqual(2, len(self.boss.workers))