Пример #1
0
def __send_sms(phone_num):
    """发送手机短信"""
    message = {"message": "success"}
    validate_code = random.randint(1111, 9999)
    sms_client = SmsApp()
    result = sms_client.sms(phone_num, validate_code)
    status_code = result.split(",")[0]
    if status_code == "1":
        key = "sms_{}".format(phone_num)
        cache.set(key, validate_code, timeout=60 * 30)
    elif status_code == "20":
        message['message'] = "余额不足"
    else:
        message['message'] = "短信发送失败:错误代码{}".format(status_code)
    return message
Пример #2
0
def send_sms(phone_num):
    """发送短信并检查短信发送的请求是否合法,用户发送短信时请调用次方法"""
    """一天最多允许发送10次短信"""
    max_time = 10  # 24小时内的最大短信发送次数
    interval = 60  # 短信发送间隔
    message = {"message": "success"}
    key = "sms_send_time_{}".format(phone_num)  # 用于计数的key的前缀
    recode_list = list()
    for i in range(max_time):
        sub_key = "{}_{}".format(key, str(i))
        val = cache.get(sub_key)
        if val is None:
            break
        else:
            recode_list.append(val)
    if len(recode_list) == 0:
        message = __send_sms(phone_num)
        if message['message'] == "success":
            """计数"""
            temp_key = "{}_{}".format(key, str(len(recode_list)))
            cache.set(temp_key, datetime.datetime.now(), timeout=60 * 24)
    elif 0 < len(recode_list) < max_time:
        now = datetime.datetime.now()
        prev = recode_list[-1]
        seconds = (now - prev).total_seconds()
        """检查发送间隔"""
        if seconds < interval:
            # message['message'] = "短信发送频繁,请等待{}秒后再试".format(int(interval - seconds))
            message = pack_message(message,
                                   error_code=4190,
                                   delay_seconds=int(interval - seconds))
        else:
            message = __send_sms(phone_num)
            if message['message'] == "success":
                """计数"""
                temp_key = "{}_{}".format(key, str(len(recode_list)))
                cache.set(temp_key, datetime.datetime.now(), timeout=60 * 24)
    else:
        # message['message'] = "已超本日短信最大发送次数"
        message = pack_message(message,
                               error_code=4014,
                               count=len(recode_list))
    return message
Пример #3
0
def check_version(os_type="android"):
    """检查apk版本
    os_type  移动端操作系统
    return   字典
    """
    sub_dir_name = "apk"
    if os_type.lower() == "android":
        pass
    else:
        try:
            ms = "check_version func Error,os_type={}".format(os_type)
            raise ValueError(ms)
        except ValueError as e:
            print(e)
            logger.exception("Error:e={}".format(e))
    key = "{}_check_version".format(sub_dir_name)
    result = cache.get(key)
    if result is None:
        result = check_file(sub_dir_name)
        cache.set(key, result, timeout=60)
    return result
Пример #4
0
def check_server_and_send_mail(*args, **kwargs):
    """
    检查副本集合的服务器是否在线?如果不在线的话就发送email.(只有在状态改变的时候才发生送email)
    :param args:
    :param kwargs:
    :return:
    """
    """
    status_dict是存放上一次服务器探测结果的字典,以服务器的 ip+":"+port为key,相关信息字典为value
    {
    "192.168.0.110:27017":
    {"ip":"192.168.0.110","port":"27017", "last_time":"2017-11-27 10:11:21.940", "last_status": True},
    ....
    }
    """
    key = "replica_set_status"
    status_dict = {} if cache.get(key) is None else cache.get(key)
    for host in replica_hosts:
        current_status = False
        ip = host['host']
        port = host['port']
        try:
            t = telnetlib.Telnet(host=ip, port=port, timeout=15)
            current_status = True
            t.close()
        except Exception as e:
            mes = "{}:{}连接失败,错误原因:{}".format(ip, port, e)
            logger.exception(mes)
            print(e)
        finally:
            now = datetime.datetime.now()
            temp_key = "{}:{}".format(ip, port)
            temp_value = {
                "ip": ip,
                "port": port,
                "last_time": now,
                "last_status": current_status
            }
            prev_status = None
            if len(status_dict) == 0:
                pass
            else:
                try:
                    prev_status = status_dict[temp_key]['last_status']
                except KeyError as e:
                    print(e)
                except TypeError as e:
                    print(e)
                finally:
                    pass
            flag_mail = False
            status_dict[temp_key] = temp_value
            cache.set(key, status_dict, timeout=60 * 5)
            if prev_status is None and not current_status:
                """第一次就检测服务器失败"""
                flag_mail = True
            elif prev_status is not None and prev_status != current_status:
                flag_mail = True
            else:
                pass
            if flag_mail:
                title = "{} 服务器mongodb检测{}".format(
                    ip, "正常" if current_status else "失败")
                content = "{} 服务器ip:{},mongodb例行检查结果:{}".format(
                    now, ip, current_status)
                send_mail(title=title, content=content)
            else:
                pass
    ms = "check_server_and_send_mail 函数检测结果: {}".format(status_dict)
    logger.info(ms)  # celery有特殊的日志系统,传统的做法无效
Пример #5
0
                               'favicon.ico',
                               mimetype="image/vnd.microsoft.icon")


@app.before_request
def show_request_before():
    # print(request)
    pass


@app.after_request
def allow_cross_domain(response):
    """允许跨域资源访问管理"""
    response.headers['Access-Control-Allow-Origin'] = '*'
    response.headers['Access-Control-Allow-Methods'] = 'PUT,GET,POST,DELETE'
    allow_headers = "Referer,Accept,Origin,User-Agent"
    response.headers['Access-Control-Allow-Headers'] = allow_headers
    # 也可以在此设置cookie
    # resp.set_cookie('username', 'the username')
    return response


if __name__ == '__main__':
    # print(app.url_map)  # 打印视图路由
    cache.set("flask_server_port", port)
    # app.debug = True  # 这一行必须在toolbar = DebugToolbarExtension(app)前面,否则不生效
    toolbar = DebugToolbarExtension(app)  # 开启html调试toolbar
    # 开启DebugToolbar的调试模式.对应app.debug = True
    # app.run(host="0.0.0.0", port=port, threaded=True)
    app.run(host="0.0.0.0", port=port, debug=True, threaded=True)  # 一般调试模式