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...')
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')
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)
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()))
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())
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 })
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)
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()))