Beispiel #1
0
def monitor_server_status():
    while True:
        cpu_rate = psutil.cpu_percent()
        mem_rate = psutil.virtual_memory().percent

        if cpu_rate > 1 or mem_rate > 95:
            if not rd.get('warnEmail'):
                # send_server_warning_mail(cpu_rate=cpu_rate, mem_rate=mem_rate)
                rd.set('warnEmail', 1)
        time.sleep(5)
        print('start threading...')
Beispiel #2
0
def reset_password():
    email = request.form.get('email')
    user = User.query.filter_by(email=email).first()
    if not user:
        flash('邮箱不存在,请输入正确的邮箱!', 'danger')
        return redirect(url_for('.forget_pwd'))
    ver_code = generate_ver_code()
    # 将验证码设置到redis中,过期时间为10分钟
    rd.set(user.id, ver_code, ex=current_app.config['EXPIRE_TIME'])
    token = generate_token(user=user, operation=Operations.RESET_PASSWORD)
    send_reset_password_email(user=user, token=token, ver_code=ver_code)
    flash('验证邮件发送成功,请到邮箱查看然后重置密码!', 'success')
    return render_template('main/auth/pwdResetNext.html')
Beispiel #3
0
def login():
    # 若当前已有用户登录则返回主页
    if current_user.is_authenticated:
        return redirect(url_for('blog_bp.index'))

    remote_ip = request.headers.get('X-Real-Ip')
    if remote_ip is None:
        remote_ip = request.remote_addr
    ban_ip = rd.get(str(remote_ip))

    form = LoginForm()
    if ban_ip is not None:
        if int(ban_ip) >= 5:
            flash('当前IP登录错误次数过多,已被禁止登录,请明天再试!', 'info')
            return render_template('main/login.html', form=form)

    if form.validate_on_submit():
        usr = form.usr_email.data
        pwd = form.password.data
        user = User.query.filter(
            or_(User.username == usr, User.email == usr.lower())).first()
        if user is not None and user.status == 2:
            flash('您的账号处于封禁状态,禁止登陆!联系管理员解除封禁!', 'danger')
            return redirect(url_for('.login'))

        if user is not None and user.check_password(pwd):
            if login_user(user, form.remember_me.data):
                user.recent_login = datetime.now()
                login_log = LoginLog(login_addr=remote_ip,
                                     user=user,
                                     real_addr=get_ip_real_add(remote_ip))
                db.session.add(login_log)
                db.session.commit()
                flash('登录成功!', 'success')
                if request.args.get('next'):
                    return redirect(url_for(request.args.next))
                print(request.referrer)
                return redirect(request.referrer)
        elif user is None:
            flash('无效的邮箱或用户名.', 'danger')
        else:
            if ban_ip is None:
                rd.set(str(request.remote_addr), str(1), ex=60 * 60 * 24)
            else:
                rd.set(str(request.remote_addr),
                       str(int(ban_ip) + 1),
                       ex=60 * 60 * 24)
            flash('无效的密码', 'danger')
    return render_template('main/login.html', form=form)
Beispiel #4
0
def get_one():
    try:
        with db.app.app_context():
            date = datetime.date.today()
            one = OneSentence.query.filter_by(day=date).first()
            if not one:
                import requests
                from bs4 import BeautifulSoup
                res = requests.get('http://wufazhuce.com/', timeout=30)
                bs = BeautifulSoup(res.text, 'html.parser')
                attr = {'class': 'fp-one-cita'}
                d = bs.find_all('div', attrs=attr)
                one = OneSentence(content=d[0].text, day=date)
                db.session.add(one)
                db.session.commit()
                write_task_log('插入每日一句成功!')
                rd.set('one', d[0].text)
    except:
        write_task_log('插入每日一句失败,错误原因:\n' + str(traceback.format_exc()))
Beispiel #5
0
def update_github_avatar():
    try:
        link = rd.get('avatar')
        res = requests.get(link, timeout=30)
        md5 = get_md5(str(get_current_time()))
        with open(basedir + '/uploads/github/{}.png'.format(md5), 'wb') as f:
            f.write(res.content)

        # 移除上一次任务存储的图片
        pre_md5 = rd.get('pre_md5')
        if pre_md5:
            import os
            os.remove(basedir + '/uploads/github/{}.png'.format(pre_md5))

        # 更新redis中local_avatar的值
        rd.set('local_avatar', '/tool/github/{}.png'.format(md5))
        rd.set('pre_md5', md5)
        logger.info('更新github头像成功!')
    except Exception as e:
        logger.error('更新github头像失败!失败原因:\n' + traceback.format_exc())
Beispiel #6
0
def load_github():
    theme = request.form.get('theme')

    star = rd.get('star')
    if star is None:
        star, fork, watcher, star_dark, fork_dark, watcher_dark, user_info, repo_info = github_social(
        )
        avatar = user_info.json()['avatar_url']
        repo_desc = repo_info.json()['description']
        # 获取浅色主题的shield
        rd.set('star', star.text)
        rd.set('fork', fork.text)
        rd.set('watcher', watcher.text)

        # 获取深色主题的shield
        rd.set('star_dark', star_dark.text)
        rd.set('fork_dark', fork_dark.text)
        rd.set('watcher_dark', watcher_dark.text)

        rd.set('avatar', avatar)
        rd.set('repo_desc', repo_desc)
        star = star.text

        if theme == 'dark':
            star = star_dark.text
    else:
        if theme == 'dark':
            fork = rd.get('fork_dark')
            watcher = rd.get('watcher_dark')
            star = rd.get('star_dark')
        else:
            fork = rd.get('fork')
            watcher = rd.get('watcher')

        avatar = rd.get('avatar')
        repo_desc = rd.get('repo_desc')
    return jsonify({
        'star': star,
        'fork': fork,
        'watcher': watcher,
        'avatar': avatar,
        'repo_desc': repo_desc
    })
Beispiel #7
0
def server_status():
    if request.method == 'POST':
        # 获取redis中历史缓存数据
        history_percent = rd.lrange(current_user.id, 0, -1)
        history_memory = rd.lrange(str(current_user.id) + 'mem', 0, -1)
        times = rd.lrange('times', 0, -1)

        # 获取cpu相关信息
        cpu_use_rate = psutil.cpu_percent()
        history_percent.append(cpu_use_rate)

        # 获取内存相关信息
        memory = psutil.virtual_memory()
        history_memory.append(memory.percent)
        # 磁盘信息
        disk = psutil.disk_usage('/')

        now_time = datetime.now().strftime('%H:%M:%S')
        times.append(now_time)
        net = psutil.net_io_counters()
        # 只保留历史200条数据
        if len(times) > 200:
            times.pop(0)
            history_percent.pop(0)
            rd.lpop(1)
            rd.lpop('times')
            rd.lpop('1mem')

            # 存入到redis缓存数据库
            rd.rpush(current_user.id, cpu_use_rate)
            rd.rpush('times', now_time)
            rd.rpush(str(current_user.id) + 'mem', memory.percent)
        else:
            # 存入到redis缓存数据库
            rd.rpush(current_user.id, cpu_use_rate)
            rd.rpush('times', now_time)
            rd.rpush(str(current_user.id) + 'mem', memory.percent)
        if cpu_use_rate > 95 or memory.percent > 95:
            # 发送告警邮件
            send = rd.get('warningEmail')
            if not send:
                # 发送间隔三小时,不然会一直收到邮件,如果该条件满足
                send_server_warning_mail(cpu_rate=cpu_use_rate,
                                         mem_rate=memory.percent)
                rd.set('warningEmail', 1, ex=60 * 60 * 3)

        return jsonify({
            'times':
            times,
            'cpu_rates':
            history_percent,
            'mem_rates':
            history_memory,
            'disk': [
                round(disk.free / 1024 / 1024 / 1024, 2),
                round(disk.used / 1024 / 1024 / 1024, 2)
            ],
            'net': [
                round(net.bytes_sent / 1024 / 1024, 2),
                round(net.bytes_recv / 1024 / 1024,
                      2), net.packets_sent, net.packets_recv, net.errin,
                net.errout, net.dropin, net.dropout
            ]
        })

    cpu_counts = psutil.cpu_count()
    cpu_use_rate = psutil.cpu_percent()
    memory = psutil.virtual_memory()
    disk = psutil.disk_usage('/')
    net = psutil.net_io_counters()
    return render_template(
        'backend/serverStatus.html',
        cpu_counts=cpu_counts,
        cpu_use_rate=cpu_use_rate,
        memory_total=round(memory.total / 1024 / 1024 / 1024, 2),
        memory_used=round(memory.used / 1024 / 1024 / 1024, 2),
        mem_percent=memory.percent,
        disk_total=round(disk.total / 1024 / 1024 / 1024, 2),
        disk_used=round(disk.used / 1024 / 1024 / 1024, 2),
        disk_free=round(disk.free / 1024 / 1024 / 1024, 2),
        net=net)
Beispiel #8
0
def update_github_info():
    try:
        star, fork, watcher, star_dark, fork_dark, watcher_dark, user_info, repo_info = github_social(
        )
        if star.status_code == 200:
            rd.set('star', star.text)
        if fork.status_code == 200:
            rd.set('fork', fork.text)
        if watcher.status_code == 200:
            rd.set('watcher', watcher.text)
        if star_dark.status_code == 200:
            rd.set('star_dark', star_dark.text)
        if fork_dark.status_code == 200:
            rd.set('fork_dark', fork_dark.text)
        if watcher_dark.status_code == 200:
            rd.set('watcher_dark', watcher_dark.text)
        if user_info.status_code == 200:
            rd.set('avatar', user_info.json()['avatar_url'])
        if repo_info.status_code == 200:
            rd.set('repo_desc', repo_info.json()['description'])
        write_task_log('更新github仓库信息成功!')
    except Exception as e:
        write_task_log('更新github仓库信息失败!失败原因:\n' + str(e.args) + '\n' +
                       str(traceback.format_exc()))