コード例 #1
0
ファイル: __init__.py プロジェクト: nextgis/peoplefinder
def configuration_post(request):
    for setting in ("imsiUpdate", "smsUpdate", "silentSms", "welcomeMessage", "replyMessage"):
        obj = DBSession.query(Settings).filter_by(name=setting).one()
        obj.value = request.POST.get(setting)
        DBSession.add(obj)

    return configuration_get(request)
コード例 #2
0
def configuration_post(request):
    for setting in ('imsiUpdate', 'smsUpdate', 'silentSms', 'welcomeMessage',
                    'replyMessage'):
        obj = DBSession.query(Settings).filter_by(name=setting).one()
        obj.value = request.POST.get(setting)
        DBSession.add(obj)

    return configuration_get(request)
コード例 #3
0
def gen_save_idsession(session, path):
    value = session
    if 'id' in session:
        print('Registra no banco a requisição')
    else:
        print('ID da session gerado.')
        value['id'] = str(uuid4())

    # DBSession.begin()
    DBSession.add(LogModel(idsession=value['id'], endpoint=path))
    transaction.commit()

    return value
コード例 #4
0
    def save_measure_to_db(self, meas, extension):
        self.logger.debug("Save measure to DB!")

        distance = self.__calculate_distance(long(meas['meas_rep']['L1_TA']))

        self.logger.debug("distance: {0}".format(distance))

        with transaction.manager:
            obj = Measure(imsi=meas['imsi'],
                          timestamp=datetime.datetime.fromtimestamp(meas['time']),
                          timing_advance=meas['meas_rep']['L1_TA'],
                          distance=distance,
                          phone_number=extension,
                          gps_lat=meas['lat'],
                          gps_lon=meas['lon'],
                          )
            self.logger.info("Add measure: imsi={0}, ta={1}, lat={2}, lon={3}".format(meas['imsi'], meas['meas_rep']['L1_TA'], meas['lat'], meas['lon']))
            DBSession.add(obj)
コード例 #5
0
    def save_measure_to_db(self, meas, extension):
        self.logger.debug("Save measure to DB!")

        distance = self.__calculate_distance(long(meas['meas_rep']['L1_TA']))

        self.logger.debug("distance: {0}".format(distance))

        with transaction.manager:
            obj = Measure(
                imsi=meas['imsi'],
                timestamp=datetime.datetime.fromtimestamp(meas['time']),
                timing_advance=meas['meas_rep']['L1_TA'],
                distance=distance,
                phone_number=extension,
                gps_lat=meas['lat'],
                gps_lon=meas['lon'],
            )
            self.logger.info(
                "Add measure: imsi={0}, ta={1}, lat={2}, lon={3}".format(
                    meas['imsi'], meas['meas_rep']['L1_TA'], meas['lat'],
                    meas['lon']))
            DBSession.add(obj)
コード例 #6
0
ファイル: ansible_async.py プロジェクト: tom2jack/ops-tornado
class SysUserHandler(RequestHandler, CommonMiXin):
    executor = ThreadPoolExecutor(THREAD_POOL_MAX)

    def __init__(self, *args, **kwargs):
        super(SysUserHandler, self).__init__(*args, **kwargs)
        self.validate_data = Dict()
        self.session = DBSession()

    def _validate_json(self):
        try:
            data = json.loads(self.request.body)
            self.validate_data.data = data
        except ValueError as e:
            logger.error("dump input data error: %s" % e.message)
            raise WorkFlowError("input data must be json data structure!")

    def _validate_required(self):
        required_field = ['resource', 'username']
        for required in required_field:
            if required not in self.validate_data.data:
                raise WorkFlowError("%s must be required!" % required)
        self.validate_data.resource = self.validate_data.data['resource']
        self.validate_data.username = self.validate_data.data['username']
        self.validate_data.key_pass = self.validate_data.data.get(
            "key_pass", None)

    def validate(self):
        try:
            self._validate_json()
            self._validate_required()
        except Exception as e:
            return False, e.message
        return True, None

    @gen.coroutine
    def post(self):
        self.add_my_header()
        status, message = self.validate()
        if status:
            response = yield self.add_system_user(self.validate_data.resource,
                                                  self.validate_data.username,
                                                  self.validate_data.key_pass)
            code = 200
        else:
            code = 400
            response = message
        self.my_response(code, response)

    @gen.coroutine
    def put(self):
        self.ImplementError()

    @gen.coroutine
    def get(self):
        self.ImplementError()

    @gen.coroutine
    def delete(self, *args, **kwargs):
        self.add_my_header()
        status, message = self.validate()
        if status:
            response = yield self.del_system_user(self.validate_data.resource,
                                                  self.validate_data.username)
            code = 200
        else:
            code = 400
            response = message
        self.my_response(code, response)

    @run_on_executor
    def add_system_user(self, resource, username, key_password):
        """
        use ansible shell module to execute command on inventory.

        Args:
            resource: inventory resource, see Resource Class
            username: which user you want to add
            key_password: the ssh private key password
        Returns:
            AnsibleReuslt: AnsibleResult instance, contain the all ansible return information.
        """
        task = Task(resource)
        key_dir = os.path.join(SSH_KEY_DIR, uuid4().hex)
        private, public = gen_keys(key_password)
        pri_file, pub_file = save_key_to_file(private, public, key_password,
                                              key_dir)
        add_user = task.add_user(username)
        add_key = task.push_key(username, pub_file)

        try:
            ssh_key = SSHKey(username=username,
                             private_key=private,
                             public_key=public,
                             key_password=key_password,
                             cache_dir=key_dir)
            self.session.add(ssh_key)
            self.session.commit()
        except Exception as e:
            self.session.rollback()
            logger.error("save ssh key instance to database failed!, %s" %
                         e.message)
        finally:
            self.session.close()

        result = {
            "add_user": add_user.result_deal,
            "add_key": add_key.result_deal
        }
        return result

    @run_on_executor
    def del_system_user(self, resource, username):
        """
        use ansible shell module to execute command on inventory.

        Args:
            resource: inventory resource, see Resource Class
            username: which user you want to add
        Returns:
            AnsibleReuslt: AnsibleResult instance, contain the all ansible return information.
        """
        task = Task(resource)
        del_user = task.del_user(username)
        return del_user.result_deal
コード例 #7
0
class MyPlaybook(ResourceBase):
    """
    this is my playbook object for execute playbook.
    Attributes:
        resource: resource dict ,see ResourceBase class
        playbook_path: relational playbook path, the default playbook directory is: <PLAYBOOK_DIR>
        req: required id
        model: sqlalchemy data model
        ws_function: web socket write message function
    """
    def __init__(self, resource, playbook_path, req_id, model):
        super(MyPlaybook, self).__init__(resource)
        self.results_raw = None
        self.playbook_path = playbook_path
        self.req = req_id
        self.model = model
        self.count = 0
        self.session = DBSession()

    def save(self, msg):
        if isinstance(msg, dict):
            msg = json.dumps(msg)
            states = 'SUCCESS'
        else:
            states = 'STARTED'
            try:
                msg = msg.decode('utf-8')
            except UnicodeEncodeError:
                msg = msg
        record = self.model(step=self.count,
                            req=self.req,
                            msg=msg,
                            states=states)
        self.session.add(record)
        self.session.commit()
        self.session.close()

    def send_web(self, msg, color):
        pass

    def display(self,
                msg,
                color=None,
                stderr=False,
                screen_only=False,
                log_only=False,
                runner=None):
        self.count += 1
        self.save(msg)
        self.send_web(msg, color)

    def run(self, extra_vars=None):
        """
        run ansible playbook, only surport relational path.
        Args:
            extra_vars: playbook extra variables.
        """
        task_results = []
        stats = CustomAggregateStats(task_results)
        callbacks.display = self.display
        playbook_cb = CustomePlaybookCallbacks(verbose=utils.VERBOSITY,
                                               task_results=task_results)
        runner_cb = PlaybookRunnerCallbacks(stats=stats,
                                            verbose=utils.VERBOSITY)
        playbook_path = os.path.join(PLAYBOOK_DIR, self.playbook_path)

        pb = PlayBook(playbook=playbook_path,
                      stats=stats,
                      callbacks=playbook_cb,
                      runner_callbacks=runner_cb,
                      inventory=self.inventory,
                      extra_vars=extra_vars,
                      module_path=C.DEFAULT_MODULE_PATH,
                      check=False)

        self.results_raw = pb.run()
        self.count += 1
        self.save(self.results_raw)
        return self.results_raw