def m_login(): try: form = MyForm.MyFormInput() if form.submit.data: username = form.input.data password = form.passwd.data token = tools.Produce(24) db_sso = db_op.user_sso val = db_sso.query.with_entities( db_sso.realName, db_sso.dingunionid, db_sso.ticket).filter(db_sso.userName == username).all() if val and password == '%sok' % username: realName, dingunionid, ticket = val[0] app_resp = make_response(redirect(url_for('mobile.mobile'))) app_resp.set_cookie('user', Md5.Md5_make(realName), path='/') app_resp.set_cookie('dingId', Md5.Md5_make(dingunionid), path='/') app_resp.set_cookie('ticket', Md5.Md5_make(ticket), path='/') app_resp.set_cookie('token', token, path='/') RC.set('OP_dingId_%s' % Md5.Md5_make(dingunionid), dingunionid) RC.set('OP_user_%s' % Md5.Md5_make(realName), realName) RC.set('OP_token_%s' % dingunionid, token) RC.set('OP_ticket_%s' % Md5.Md5_make(ticket), ticket) RC.set('OP_logout_ticket_%s' % ticket, ticket) return app_resp except Exception as e: logging.error(e) return render_template('mobile/m_login.html', form=form)
def login(): try: db_sso = db_op.user_sso ticket = tools.http_args(request,'ticket') if ticket: try: cas_resp = cas_client.perform_service_validate(ticket=ticket,service_url=service_url) if cas_resp and cas_resp.success: try: infos = cas_resp.attributes departmentName = infos['departmentName'] mail = infos['mail'] mobilePhone = infos['mobilePhone'] userName = infos['userName'] realName = infos['realName'] dingunionid = infos['dingunionid'] token = tools.Produce(24) update_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) except Exception as e: logging.error(e) else: try: val = db_sso.query.filter(db_sso.dingunionid == dingunionid).all() if val: db_sso.query.filter(db_sso.dingunionid == dingunionid).update({db_sso.department:departmentName, db_sso.mail:mail, db_sso.mobilePhone:mobilePhone, db_sso.userName: userName, db_sso.ticket: ticket, db_sso.realName: realName, db_sso.update_time:update_time}) db_op.DB.session.commit() else: c =db_sso(userName=userName,realName=realName,mail=mail,mobilePhone=mobilePhone,department=departmentName, dingunionid=dingunionid,ticket=ticket,grade='9,10',update_time=update_time) db_op.DB.session.add(c) db_op.DB.session.commit() except Exception as e: logging.error(e) else: URL = url_for('main') app_resp = make_response(redirect(URL)) app_resp.set_cookie('user', Md5.Md5_make(realName),path='/') app_resp.set_cookie('dingId', Md5.Md5_make(dingunionid),path='/') app_resp.set_cookie('ticket', Md5.Md5_make(ticket),path='/') app_resp.set_cookie('token',token,path='/') Redis.set('OP_dingId_%s' % Md5.Md5_make(dingunionid), dingunionid) Redis.set('OP_user_%s' % Md5.Md5_make(realName), realName) Redis.set('OP_token_%s' %dingunionid,token) Redis.set('OP_ticket_%s' %Md5.Md5_make(ticket),ticket) Redis.set('OP_logout_ticket_%s' %ticket, ticket) Redis.set('OP_dingid_ticket_%s' %ticket, dingunionid) return app_resp except Exception as e: logging.error(e) except Exception as e: logging.error(e) return redirect(url_for('error')) return redirect(cas_client.get_login_url(service_url=service_url))
def platform_token(action=None, id=None, args=None): tools.Async_log(g.user, request.url) db_token = db_op.platform_token tm = time.strftime('%Y-%m-%d', time.localtime()) form = MyForm.Form_platform_token() tables = ['第三方平台', '连接方式', 'Token', '颁发日期', '失效日期', '管理'] if action == 'add': expire_date = "2999-12-30" if id > 0: expire_date = datetime.datetime.now() + datetime.timedelta(days=id) expire_date = expire_date.strftime('%Y-%m-%d') try: c = db_token(platform=args, channel='api', token=Md5.Md5_make(tools.Produce(8, string.digits)), award=tm, expire=expire_date) db_op.DB.session.add(c) db_op.DB.session.commit() return render_template_string('success') except Exception as e: logging.error(e) return render_template_string('fail') if action == 'modify': try: db_token.query.filter(db_token.id == id).update( {db_token.expire: args}) db_op.DB.session.commit() return render_template_string('success') except Exception as e: logging.error(e) return render_template_string('fail') if action == 'drop': try: v = db_token.query.filter(db_token.id == id).all() for c in v: db_op.DB.session.delete(c) db_op.DB.session.commit() return render_template_string('success') except Exception as e: logging.error(e) return render_template_string('fail') vals = db_token.query.with_entities( db_token.id, db_token.platform, db_token.channel, db_token.token, db_token.award, db_token.expire).order_by(desc(db_token.id)).all() return render_template('platform_token.html', form=form, vals=vals, tables=tables, tm=tm)
def publish(): try: tools.Async_log(g.user, request.url) importlib.reload(MyForm) secret_key = tools.Produce(length=12, chars=string.digits) Msg_Key = 'op_publish_msg_%s' % secret_key form = MyForm.MyFormPublish() if form.submit.data: try: if Redis.exists(Msg_Key): raise flash('上线操作过于频繁,请稍等%s秒......' % Redis.ttl(Msg_Key)) package_url = form.package_url.data describe = form.describe.data package_md5 = form.package_md5.data package_type = form.package_type.data publish_type = form.publish_type.data check_url = form.check_url.data restart = form.restart.data execute = form.execute.data rb_project = form.project.data rb_version = form.version.data gray = form.gray.data if execute == 'rollback': if not rb_project and not rb_version: raise logging.error("choice can not be empty!") if execute == 'publish': if not package_url or not package_md5 or not check_url or not describe: raise logging.error("input can not be empty!") Package_name = package_url.split('/')[-1] package_name = Package_name.replace('.zip', '') rb_project = '-'.join(package_name.split('-')[:-1]) INFOS = { 'package_url': package_url, 'package_md5': package_md5, 'package_type': package_type, 'publish_type': publish_type, 'user': g.user, 'describe': describe.replace('"', '').replace("'", ''), 'gray': int(gray), 'restart': restart, 'execute': execute, 'check_url': check_url.replace('https', 'http'), 'project': rb_project, 'version': rb_version, 'channel': 'web', 'callback_url': 'None', 'token': 'None', 'timestamp': int(time.time()) } #启动代码分发控制中心 Scheduler = produce.SchedulerPublish() Scheduler = Scheduler.Scheduler_mem( task_publish.Publish_center, [INFOS, Msg_Key, secret_key]) Scheduler.start() return render_template('publish_show.html', secret_key=secret_key) except Exception as e: if 'old-style' not in str(e): logging.error(e) except Exception as e: logging.error(e) return redirect(url_for('error')) return render_template('publish.html', form=form)
def index(): try: whitelist = [] Key = "op_alarm_load_whitelist" if RC_CLUSTER.exists(Key): whitelist = RC_CLUSTER.smembers(Key) td = time.strftime("%Y-%m-%d", time.localtime()) td_1 = datetime.datetime.now() - datetime.timedelta(days=1) td_1 = td_1.strftime("%Y-%m-%d") td_7 = datetime.datetime.now() - datetime.timedelta(days=7) td_7 = td_7.strftime("%Y-%m-%d") TM = time.strftime('%M', time.localtime()) BUSIS = [] #业务信息展示 try: Key = 'op_k8s_ingress_log' line = Line("容器平台业务QPS统计", width='105%', height=250, title_pos='center', title_text_size=12) if RC.exists('%s_%s' % (Key, td)): try: vals = RC.hgetall('%s_%s' % (Key, td)) vals = sorted(vals.items(), key=lambda item: item[0]) attrs = [val[0] for val in vals[-15:]] vals = [int(int(val[1]) / 60) for val in vals[-15:]] line.add('', attrs, vals, is_label_show=True, is_toolbox_show=False, legend_pos='65%', xaxis_interval=0, is_fill=True, area_opacity=0.3, is_smooth=True) except Exception as e: logging.error(e) else: total_key = 'op_totals_alarms_tmp' for i in range(7): data_now = datetime.datetime.now() - datetime.timedelta( days=i) dd = data_now.strftime('%Y-%m-%d') alarm_count_key = '%s_%s' % ('op_business_alarm_count', dd) if RC_CLUSTER.exists(alarm_count_key): vals = RC_CLUSTER.hgetall(alarm_count_key) vals = sorted(vals.items(), key=lambda item: int(item[1])) for val in vals: RC_CLUSTER.hincrby(total_key, dd, val[1]) line = Line("业务监控报警近期统计", width='105%', height=250, title_pos='center', title_text_size=12) if RC_CLUSTER.exists(total_key): vals = RC_CLUSTER.hgetall(total_key) vals = sorted(vals.items(), key=lambda item: item[0], reverse=True) RC_CLUSTER.delete(total_key) attrs = [val[0] for val in vals] vals = [int(val[1]) for val in vals] line.add("", attrs, vals, is_label_show=True, is_toolbox_show=False, is_legend_show=False, xaxis_interval=0, is_fill=True, area_opacity=0.3, is_smooth=True) bar = Bar("线上业务实时PV统计", width='105%', height=250, title_pos='center', title_text_size=12) busi_vals = RC_CLUSTER.hgetall('op_business_pv_%s' % td) if busi_vals: busi_vals = sorted(busi_vals.items(), key=lambda item: int(float(item[1])), reverse=True) bar_vals = [val[0] for val in busi_vals[:8]] bar_counts = [ float('%.4f' % (float(val[1]) / 100000000)) for val in busi_vals[:8] ] bar.add("", bar_vals, bar_counts, is_label_show=True, is_toolbox_show=False, legend_orient='vertical', legend_pos='right', xaxis_interval=0, yaxis_formatter='亿') BUSIS.extend((bar, line)) except Exception as e: logging.error(e) #网站并发访问展示 try: NEW_DATA = [ eval(v) for v in RC.lrange('internet_access_%s' % td, 0, -1) ] attr = [DATA[0] for DATA in NEW_DATA] vals = [int(int(DATA[1]) / 60) for DATA in NEW_DATA] line = Line('线上业务QPS统计', title_pos='center', title_text_size=12, width='109%', height='250px') line.add("今天", attr, vals, is_toolbox_show=False, is_smooth=True, mark_point=["max", "min"], mark_point_symbolsize=80, is_datazoom_show=True, datazoom_range=[v for v in range(100, 10)], datazoom_type='both', legend_pos='70%') if RC.exists('internet_access_%s' % td_1): OLD_DATA = [ eval(v) for v in RC.lrange('internet_access_%s' % td_1, 0, -1) ] OLD_DATA = [val for val in OLD_DATA if val[0] in attr] old_attr = [DATA[0] for DATA in OLD_DATA] old_vals = [int(int(DATA[1]) / 60) for DATA in OLD_DATA] if attr and vals: line.add("昨天", old_attr, old_vals, is_toolbox_show=False, is_smooth=True, mark_point=["max", "min"], mark_point_symbolsize=80, is_datazoom_show=True, datazoom_range=[v for v in range(100, 10)], datazoom_type='both', legend_pos='70%') if RC.exists('internet_access_%s' % td_7): OLD_DATA = [ eval(v) for v in RC.lrange('internet_access_%s' % td_7, 0, -1) ] OLD_DATA = [val for val in OLD_DATA if val[0] in attr] old_attr = [DATA[0] for DATA in OLD_DATA] old_vals = [int(int(DATA[1]) / 60) for DATA in OLD_DATA] if attr and vals: line.add("上周", old_attr, old_vals, is_toolbox_show=False, is_smooth=True, mark_point=["max", "min"], mark_point_symbolsize=80, is_datazoom_show=True, datazoom_range=[v for v in range(100, 10)], datazoom_type='both', legend_pos='70%') except Exception as e: logging.error(e) #监控数据展示 try: tm = datetime.datetime.now() - datetime.timedelta(minutes=1) tm = tm.strftime('%H:%M') z_triggers = RC.hgetall('zabbix_triggers_%s' % tm) if z_triggers: z_triggers = [[t, z_triggers[t]] for t in z_triggers] except Exception as e: logging.error(e) #服务器预警信息 try: z_infos = defaultdict() dict_load = None dict_openfile = None if RC_CLUSTER.exists('op_zabbix_server_load_top'): dict_load = eval(RC_CLUSTER.get('op_zabbix_server_load_top')) if RC_CLUSTER.exists('op_zabbix_server_openfile_top'): dict_openfile = eval( RC_CLUSTER.get('op_zabbix_server_openfile_top')) if dict_load: z_infos['cpu_load'] = dict_load if dict_openfile: z_infos['openfile'] = dict_openfile except Exception as e: logging.error(e) app_resp = make_response( render_template('index.html', line=line, tm=TM, z_triggers=z_triggers, z_infos=z_infos, BUSIS=BUSIS, whitelist=whitelist)) app_resp.set_cookie('secret_key', tools.Produce(length=8, chars=string.digits), path='/') return app_resp except Exception as e: logging.error(e) flash('获取数据错误!', "error") return render_template('Message.html')