Exemple #1
0
    def on_message(self, message):
        """
        处理 command 驱动的 web socket 命令
        :param message:
        :return:
        """
        self.info("[%s]Received: " % id(self) + message)
        try:
            data = json.loads(message)
        except:
            self.error(traceback.format_exc())
            self.send(command="bad-json", content=message)
            raise gen.Return()
        if data == {}:
            # 表示是心跳
            raise gen.Return()
        try:
            data = Schema({
                "command": schema_utf8,
                Optional("command_id", default=""): schema_utf8_empty,
                "content": Or(str, str, list, dict),
            }).validate(data)
        except SchemaError:
            self.send(command="bad-json-schema", content=message)
            self.error("bad json: failed when parsing schema.")
            raise gen.Return()

        command_func = "cmd_" + data["command"].replace("-", "_").lower()
        data.pop("command")
        yield getattr(self, command_func)(**data)
Exemple #2
0
    def run_alert(self, alert):
        es_query = alert["query"]["es_query"]
        self.log.debug("es_query: %r" % es_query)
        # Adjust time
        start = alert["last_run"]
        if not start:
            start = time() - alert["interval"]
        try:
            for i, f in enumerate(es_query["query"]["bool"]["filter"]):
                if f.has_key("range") and f["range"].has_key("@timestamp"):
                    time_filter = es_query["query"]["bool"]["filter"][i][
                        "range"]["@timestamp"]
                    time_filter["gte"] = int(start * 1000)
                    del time_filter["lte"]
        except KeyError:
            if es_query.has_key("query") and es_query["query"].has_key("bool") and\
             es_query["query"]["bool"].has_key("filter"):
                es_query["query"]["bool"]["filter"]["range"] = {
                    "@timestamp": {
                        "gte": int(start * 1000)
                    }
                }
            else:
                raise gen.Return(
                    {"error": "Query does not support specific times."})

        self.log.debug("Running query %s" %
                       json.dumps(alert["query"]["es_query"]))
        req = HTTPRequest("http://" + self.passthrough_node + "/es/_search",
                          method="POST",
                          body=json.dumps(alert["query"]["es_query"]))
        response = yield self.client.fetch(req, raise_error=False)
        self.log.debug("response: %r" % response)
        self.log.debug("body: %s" % response.body)
        raise gen.Return(response)
Exemple #3
0
 def _get_checkpoint_notebooks(self, base):
     # Get the model for the current notebook:
     cm = self.contents_manager
     model = yield gen.maybe_future(
         cm.get(base, content=True, type='notebook'))
     remote_nb = model['content']
     # Get the model for the checkpoint notebook:
     checkpoints = yield gen.maybe_future(cm.list_checkpoints(base))
     if not checkpoints:
         # No checkpoints, indicate unchanged:
         self.log.info('No checkpoints for file: %r, %r', base, checkpoints)
         raise gen.Return((remote_nb, remote_nb))
     self.log.debug('Checkpoints: %r', checkpoints)
     checkpoint = checkpoints[0]
     if isinstance(cm.checkpoints, GenericCheckpointsMixin):
         checkpoint_model = yield gen.maybe_future(
             cm.checkpoints.get_notebook_checkpoint(checkpoint, base))
         base_nb = checkpoint_model['content']
     elif isinstance(cm.checkpoints, FileCheckpoints):
         path = yield gen.maybe_future(
             cm.checkpoints.checkpoint_path(checkpoint['id'], base))
         base_nb = read_notebook(path, on_null='minimal')
     else:
         raise RuntimeError('Unknown checkpoint handler interface')
     raise gen.Return((base_nb, remote_nb))
Exemple #4
0
def tiny_url(long_url):
    shorten_service_url = "http://dwz.cn/create.php"
    my_link = {"url": long_url}
    resp_obj = yield async_requests.session("POST",
                                            shorten_service_url,
                                            callback=None,
                                            data=my_link)
    resp = json.loads(resp_obj.body)
    if resp['status'] == 0:
        raise gen.Return(resp["tinyurl"])
    else:
        logging.warning('Shorten url=[%s] error, msg=[%s]' %
                        (long_url, resp["err_msg"]))
        raise gen.Return(None)
Exemple #5
0
 def async_fetch(self, http_request=None):
     """
     请求BL\DAS接口,拿到返回信息
     """
     response = yield async_requests.fetch(http_request)
     resp = RedirectedHTTPResponse(response)
     raise gen.Return(resp)
Exemple #6
0
def async_get_coordinates(city, district, address):
    """
    通过百度地图的API接口,将某个地址转换成经纬度坐标
    详情见:http://developer.baidu.com/map/webservice-placeapi.htm
    中的“5.2 Place检索示例”小节
    """
    if not city:
        city = '杭州市' if isinstance(address, unicode) else safe_utf8('杭州市')
    address = "%s %s %s" % (city, district, address)
    url = r"http://api.map.baidu.com/geocoder/v2/"
    params = {
        "ak": _get_ak(),
        "output": "json",
        "address": safe_utf8(address),
    }
    response = yield async_requests.get(url, params=params)
    lat = 0.0
    lng = 0.0
    if response.code == 200:
        data = json.loads(response.body)
        if data['status'] == 0:
            result = data['result']
            location = result.get("location")
            if result['confidence'] >= 20:
                lat = location.get("lat")
                lng = location.get("lng")
    # "lat" : 30.2592444615,
    # "lng" : 120.2193754157,

    raise gen.Return((lng, lat))
Exemple #7
0
 def get_user_by_id(user_id):
     user = {
         "user_id" : user_id,
         "username" : "matrix",
         "email" : "*****@*****.**",
         "avatar" : "matrix.png"
     }
     raise gen.Return(User)
Exemple #8
0
 def redirect_delete(self,
                     url,
                     params=None,
                     redirect_header=True,
                     **kwargs):
     response = yield async_requests.delete(url, params=params, **kwargs)
     req = RedirectedHTTPResponse(response)
     self.write_response(*req.parse_response(redirect_header))
     raise gen.Return(req)
Exemple #9
0
 def get_response_list(self, request_list):
     """
     异步,获取列表中的request请求
     :param request_list: [tornado.httpclient.HTTPRequest, ...]
     :return:
     """
     # http_client = httpclient.AsyncHTTPClient()
     response_list = yield [self.asyncHTTPClient.fetch(request) for request in request_list]
     raise gen.Return(response_list)
Exemple #10
0
 def get_response_dict(self, request_dict):
     """
     异步,获取字典中的request请求
     :param request_dict: {"key": tornado.httpclient.HTTPRequest, ...}
     :return:
     """
     # http_client = httpclient.AsyncHTTPClient()
     response_dict = yield {key: self.asyncHTTPClient.fetch(value) for key, value in list(request_dict.items())}
     raise gen.Return(response_dict)
Exemple #11
0
 def get_user_info_from_token(self, simplified=False):
     account_info = yield AsyncAccount.get_user_info_from_token(
         self.get_token())
     if not account_info:
         raise gen.Return()  # token 错误或者没给 token, 单纯的返回 None, 不报错。
     if simplified:
         account_info_collected = {
             i: account_info[i]
             for i in account_info if i in (
                 # 精简字段: 选出需要的字段
                 "id",
                 "name",
                 "tel")
         }
         account_info_collected["m_type"] = self.get_app_name()
         raise gen.Return(account_info_collected)
     else:
         account_info["m_type"] = self.get_app_name()
         raise gen.Return(account_info)
Exemple #12
0
    def process_timeline_data(self, user_id):
        q_records = yield User.get_question_records_by_user_id(user_id)
        a_records = yield User.get_answer_records_by_user_id(user_id)
        c_record = yield User.get_oldest_comment_record_by_user_id(user_id)
        print 'q_records: ', q_records
        records = self.add_attrs(q_records, 'Question') + self.add_attrs(
            a_records, 'Answer') + self.add_attrs(c_record, 'Comment')

        sort_recs = self.sort_by_time(records)
        print 'sort_recs: ', sort_recs
        raise gen.Return(sort_recs)
Exemple #13
0
    def calculate_contribution(self, datetimes):
        contribution = {}
        for each in datetimes:

            date_string = each.createAt.strftime("%Y-%m-%d")
            date_datetime = time.strptime(date_string, '%Y-%m-%d')
            date_timestamp = int(time.mktime(date_datetime))

            if date_timestamp not in contribution:
                contribution[date_timestamp] = 1
            else:
                contribution[date_timestamp] += 1

        raise gen.Return(contribution)
Exemple #14
0
    def get_top_snippets_by_count(self, count):
        top_snippets = yield Snippet.get_top_snippets_by_count(count)

        for snippet in top_snippets:
            snippet.author = yield User.get_user_by_id(snippet.author)
            snippet.praises = yield Praise.get_praises_by_sid(snippet.sid)
            snippet.comments = yield Comment.get_comments_by_sid(snippet.sid)
            snippet.pictures = json.loads(snippet.pictures)
            snippet.is_praised = False
            for each in snippet.praises:
                if each.user_id == self.current_user.user_id:
                    snippet.is_praised = True
                    break
        raise gen.Return(top_snippets)
Exemple #15
0
    def get(self, user_id):
        if not user_id.isdigit():
            self.finish({
                'result': False,
                'msg': "参数错误"
            })
            raise gen.Return(None)

        user = yield User.get_user_by_id(user_id)
        timeline_recs = yield self.process_timeline_data(user_id)

        self.render("user/profile.jade",
                    profile_user=user,
                    current_user=self.current_user,
                    records=timeline_recs)
Exemple #16
0
    def get_snippets_by_page(self, page):
        snippets = yield Snippet.get_snippets((int(page) - 1) * 10, 10)

        for snippet in snippets:
            snippet.author = yield User.get_user_by_id(snippet.author)
            snippet.praises = yield Praise.get_praises_by_sid(snippet.sid)
            snippet.comments = yield Comment.get_comments_by_sid(snippet.sid)
            snippet.pictures = json.loads(snippet.pictures)
            snippet.is_praised = False
            for each in snippet.praises:
                if each.user_id == self.current_user.user_id:
                    snippet.is_praised = True
                    break
        snippets_count = yield Snippet.get_snippet_count()

        raise gen.Return((snippets, snippets_count))
Exemple #17
0
def async_get_distance(from_lat, from_lng, to_lat, to_lng, region, origin_region, dest_region, mode='walking',
                       waypoints=None):
    """
    调用百度API获取不同模式下的距离
    百度API文档地址: http://developer.baidu.com/map/index.php?title=webapi/direction-api
    :param from_lat:
    :param from_lng:
    :param to_lat:
    :param to_lng:
    :param region:
    :param origin_region:
    :param dest_region:
    :param mode: 支持 walking(步行) / driving(驾车) / transit(公交)
    :param waypoints: 选填 途经点集合,包括一个或多个用竖线字符"|"分隔的地址名称或经纬度。支持驾车、公交方案,最多支持5个途经点。
    :return:
    """

    url = "http://api.map.baidu.com/direction/v1"
    params = {
        "mode": mode,
        "origin": "%f,%f" % (from_lat, from_lng),
        "destination": "%f,%f" % (to_lat, to_lng),
        "region": region,
        "origin_region": origin_region,
        "destination_region": dest_region,
        "output": "json",
        "ak": _get_ak()
    }
    if waypoints:
        params["waypoints"] = waypoints

    response = yield async_requests.get(url, params=params)
    distance = 0
    if response.code == 200:
        response = json.loads(response.body)
        if response['status'] == 0:
            distance = response['result']['routes'][0]['distance']

    # # 如果获取百度不成功的话
    # if distance == 0:
    #     distance = 1.5 * Mercator.distance(from_lng, from_lat, to_lng, to_lat)
    raise gen.Return(distance)
Exemple #18
0
    def get(self, sid):
        snippet = yield Snippet.get_snippet_by_sid(sid)
        if snippet == None:
            self.finish("404 not found!")
            raise gen.Return()

        snippet.author = yield User.get_user_by_id(snippet.author)
        snippet.praises = yield Praise.get_praises_by_sid(snippet.sid)
        snippet.comments = yield Comment.get_comments_by_sid(snippet.sid)
        snippet.pictures = json.loads(snippet.pictures)
        snippet.is_praised = False
        for each in snippet.praises:
            if each.user_id == self.current_user.user_id:
                snippet.is_praised = True
                break
        snippet.comments = sorted(snippet.comments, self.cpm_comments)

        data = {"current_user": self.current_user, 'snippet': snippet}

        self.render('snippet/snippet-comment.jade', **data)
Exemple #19
0
    def get_questions_detail(self, tab, page):
        if tab == 'hotest':
            questions = yield Question.get_hotest_questions(
                page * self.item_in_page, self.item_in_page)
        elif tab == "zero-answer":
            questions = yield Question.get_0answer_questions(
                page * self.item_in_page, self.item_in_page)
        else:
            questions = yield Question.get_newest_questions(
                page * self.item_in_page, self.item_in_page)

        for question in questions:
            question.author = yield User.get_user_by_id(question.author)
            question.votes = yield Vote.get_votes_count_by_qid(question.qid)
            question.answers = yield Answer.get_answers_by_qid(question.qid)
            question.tags = yield Tag.get_tags_by_qid(question.qid)

        questions_count = yield Question.get_question_count()

        raise gen.Return((questions, questions_count))
Exemple #20
0
def async_geoconv(lng, lat, fro=3):
    """
    将其他坐标系转换成百度坐标
    :param lng: 经度
    :param lat: 纬度
    :param from:
        1:GPS设备获取的角度坐标,wgs84坐标;

        2:GPS获取的米制坐标、sogou地图所用坐标;

        3:google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标,国测局坐标;

        4:3中列表地图坐标对应的米制坐标;

        5:百度地图采用的经纬度坐标;

        6:百度地图采用的米制坐标;

        7:mapbar地图坐标;

        8:51地图坐标
    :return:
    """
    url = "http://api.map.baidu.com/geoconv/v1/?"
    params = {
        "from": fro,
        "to": 5,
        "coords": ",".join([str(lng), str(lat)]),
        "ak": _get_ak()
    }
    response = yield async_requests.get(url, params=params)
    lng, lat = 0.0, 0.0
    if response.code == 200:
        data = json.loads(response.body)
        if data['status'] == 0:
            loc = data['result'][0]
            lng = loc['x']
            lat = loc['y']

    raise gen.Return((lng, lat))
Exemple #21
0
def async_get_reverse_location(lng, lat):
    """
    文档:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
    逆地理编码服务
    :param lng: 经度
    :param lat: 纬度
    :return:
    {
        "adcode": "110105",
        "city": "北京市",
        "country": "中国",
        "direction": "北",
        "distance": "68",
        "district": "朝阳区",
        "province": "北京市",
        "street": "花家地街",
        "street_number": "19号",
        "country_code": 0,
        "address": "北京市朝阳区花家地街19号四强写字楼北79米",
        "lng": 116.48088102568,
        "lat": 39.989410050151
    }
    """
    url = r"http://api.map.baidu.com/geocoder/v2/"
    params = {
        "ak": _get_ak(),
        "output": "json",
        "location": "{lat},{lng}".format(lat=lat, lng=lng),
    }
    response = yield async_requests.get(url, params=params)
    if response.code == 200:
        response = json.loads(response.body)
        address_component = response['result']['addressComponent']
        address_component['address'] = response['result']['formatted_address'] + \
                                       response['result']['sematic_description']
        address_component['lng'], address_component['lat'] = response['result']['location']['lng'], \
                                                             response['result']['location']['lat']
    else:
        address_component = {}
    raise gen.Return(address_component)
Exemple #22
0
 def redirect_put(self, url, json=None, redirect_header=True, **kwargs):
     response = yield async_requests.put(url, json=json, **kwargs)
     req = RedirectedHTTPResponse(response)
     self.write_response(*req.parse_response(redirect_header))
     raise gen.Return(req)
Exemple #23
0
 def get_key_item_datetimes(self):
     user_id = self.get_argument('user_id')
     datetimes = yield User.get_heat_datetimes_by_user_id(user_id)
     raise gen.Return(datetimes)
Exemple #24
0
 def das_requests(self, http_request=None):
     response = yield async_requests.fetch(http_request)
     req = RedirectedHTTPResponse(response)
     raise gen.Return(req)
 def get_logical_nvme(self, ip):
     func_name = self.get_func_name()
     data = yield self.exec_command(ip, func_name)
     raise gen.Return(data)
Exemple #26
0
 def redirect_request(self, http_request=None, redirect_header=True):
     response = yield async_requests.fetch(http_request)
     req = RedirectedHTTPResponse(response)
     self.write_response(*req.parse_response(redirect_header))
     raise gen.Return(req)
Exemple #27
0
 def das_get(self, url, params=None, **kwargs):
     response = yield async_requests.get(url, params=params, **kwargs)
     req = RedirectedHTTPResponse(response)
     raise gen.Return(req)
 def get_physical_flash(self, ip):
     func_name = self.get_func_name()
     future = self.exec_command(ip, func_name)
     data = yield future
     raise gen.Return(data)
 def get_physical_disk(self, ip):
     func_name = self.get_func_name()
     data = yield self.exec_command(ip, func_name)
     raise gen.Return(data)