def process_code_build(event): if 'additional-information' not in event['detail']: logger.debug("Skipping due to no additional-information") return cbi = CodeBuildInfo.from_event(event) logger.debug(vars(cbi)) (stage, pid, actionStates) = pipeline_from_build(cbi) logger.debug(stage, pid, actionStates) if not pid: return build_info = BuildInfo(pid, cbi.pipeline) existing_msg = find_message_for_build(build_info) builder = MessageBuilder(build_info, existing_msg) if 'phases' in event['detail']['additional-information']: phases = event['detail']['additional-information']['phases'] builder.update_build_stage_info(stage, phases, actionStates) logs = event['detail'].get('additional-information', {}).get('logs') post_build_msg(builder)
def index(request): global TOKEN, router_error, router_reply weixinlogger = logging.getLogger('weixin') conversationlogger = logging.getLogger('conversation') if request.method == 'GET': if 'signature' not in request.GET or 'timestamp' not in request.GET or 'nonce' not in request.GET or 'echostr' not in request.GET: return HttpResponse('bad request %s' % str(request.GET)) signature = request.GET['signature'] timestamp = request.GET['timestamp'] nonce = request.GET['nonce'] echostr = request.GET['echostr'] weixinlogger.info("receive one get message signature %s timestamp %s nonce %s echostr %s" % (signature, timestamp, nonce, echostr)) weixin = WeiXin.on_connect(TOKEN, timestamp, nonce, signature, echostr) if weixin.validate(): return HttpResponse(echostr, content_type="text/plain") else: return HttpResponse(None, content_type="text/plain") elif request.method == 'POST': try: weixin = WeiXin.on_message(smart_str(request.raw_post_data)) message = weixin.to_json() weixinlogger.info("receive one message %s" % str(message)) conversationlogger.info("receive one message %s" % str(message)) try: user = WeixinUser.objects.get(uid=message['FromUserName']) except: user = WeixinUser() user.src = message['ToUserName'] user.uid = message['FromUserName'] user.integral = 0 user.save() Router.get_instance().reply(message, _route_callback) if router_error is None and router_reply is not None: router_reply.platform = MessageBuilder.PLATFORM_WEIXIN if router_reply.type != MessageBuilder.TYPE_NO_RESPONSE: weixinlogger.info("reply success type %s platform %s data %s" % (router_reply.type, router_reply.platform, router_reply.data)) conversationlogger.info("reply success type %s platform %s data %s" % (router_reply.type, router_reply.platform, router_reply.data)) return HttpResponse(MessageBuilder.build(message, router_reply), content_type="application/xml") else: weixinlogger.info("%s", router_reply.data) conversationlogger.info("%s", router_reply.data) else: weixinlogger.info("router error %s router reply %s" % (str(router_error), str(router_reply))) conversationlogger.info("router error %s router reply %s" % (str(router_error), str(router_reply))) raise "not find games" return HttpResponse('<xml></xml>', content_type="application/xml") except: logger.error(traceback.format_exc()) reply_config = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, MessageBuilder.PLATFORM_WEIXIN, u"非常抱歉,没能理解你的话") return HttpResponse(MessageBuilder.build(message, reply_config), content_type="application/xml")
def process_code_build(event): pipeline_name, build_id, build_project_name = get_codebuild_from_pipeline_metadata(event) stage_name, pipeline_execution_id, action_state = find_pipeline_from_build(pipeline_name, build_id) if not pipeline_execution_id: return message = find_slack_message_for_update(pipeline_execution_id) message_builder = MessageBuilder(message, pipeline_execution_id, pipeline_name) if is_codebuild_phases_updatable(event): phases = get_codebuild_phases(event) message_builder.update_build_stage_info(stage_name, phases, action_state, build_project_name) post_message(message_builder=message_builder)
def process(event): token = os.getenv("SLACK_TOKEN", None) bot_token = os.getenv("SLACK_BOT_TOKEN") bot_name = os.getenv("SLACK_BOT_NAME", "ssm-instanceid-to-slack") bot_icon = os.getenv("SLACK_BOT_ICON", ":robot_face:") channel_name = os.getenv("SLACK_CHANNEL_NAME", "ssm-instanceid-notice") channel_id = os.getenv("SLACK_CHANNEL_ID", None) region = os.getenv("AWS_REGION", None) parser = AwsLogsParser(event) builder = MessageBuilder(region, parser.log_group, parser.log_stream, parser.message) adapter = SlackAdapter(token, bot_token, bot_name, bot_icon, channel_name, channel_id) res = adapter.post(builder.attachments()) if 'error' in res: message = "{} post error: {}".format(__name__, res['error']) logger.error(message) raise ValueError(message)
def processCodeBuild(event): cbi = CodeBuildInfo.fromEvent(event) (stage, pid, actionStates) = pipelineFromBuild(cbi) if not pid: return buildInfo = BuildInfo(pid, cbi.pipeline) existing_msg = find_message_for_build(buildInfo) builder = MessageBuilder(buildInfo, existing_msg) if 'phases' in event['detail']['additional-information']: phases = event['detail']['additional-information']['phases'] builder.updateBuildStageInfo(stage, phases, actionStates) # logs = event['detail'].get('additional-information', {}).get('logs') # if logs: # builder.attachLogs(event['detail']['additional-information']['logs']) post_build_msg(builder)
def processCodeBuild(event): event_id = event['detail']['build-id'].split('/')[1] build_status = codebuild_client.batch_get_builds(ids=[event_id]) pid = event_id.split(':')[1] or None if not pid: return pipeline_name = event_id.split(':')[0] cbi = CodeBuildInfo(build_status['builds'][0]['initiator'][13:], event_id) (stage, pid, actionStates) = pipelineFromBuild(cbi) buildInfo = BuildInfo(pid, pipeline_name) existing_msg = find_message_for_build(buildInfo) builder = MessageBuilder(buildInfo, existing_msg) phases = build_status['builds'][0]['phases'] builder.updateBuildStageInfo(stage, phases, actionStates) logs = build_status['builds'][0].get('logs', {}) try: if logs['streamName']: builder.attachLogs(logs) except KeyError: pass post_build_msg(builder)
def processCodeBuild(event): # logger.info("processCodeBuild") if is_skip_codebuild_notice(event['detail'].get('eventName')): return cbi = CodeBuildInfo.from_event(event) (stage, pid, actionStates) = pipelineFromBuild(cbi) if not pid: return build_info = BuildInfo(pid, cbi.pipeline, actionStates) existing_msg = find_message_for_build(build_info) builder = MessageBuilder(build_info, existing_msg) if 'phases' in event['detail']['additional-information']: phases = event['detail']['additional-information']['phases'] builder.updateBuildStageInfo(stage, phases, actionStates) logs = event['detail'].get('additional-information', {}).get('logs') if logs: builder.attachLogs(event['detail']['additional-information']['logs']) post_build_msg(builder)
def process_code_pipeline(event): pipeline_execution_id, pipeline_name = get_pipeline_metadata(event) message = find_slack_message_for_update(pipeline_execution_id) message_builder = MessageBuilder(message, pipeline_execution_id, pipeline_name) message_builder.update_pipeline_message(event=event) if message_builder.has_revision_info_field(): revision_info = find_revision_info(pipeline_execution_id, pipeline_name) message_builder.attach_revision_info(revision_info) post_message(message_builder=message_builder)
def processCodePipeline(event): buildInfo = BuildInfo.fromEvent(event) existing_msg = find_message_for_build(buildInfo) builder = MessageBuilder(buildInfo, existing_msg) builder.updatePipelineEvent(event) if builder.needsRevisionInfo(): revision = findRevisionInfo(buildInfo) builder.attachRevisionInfo(revision) post_build_msg(builder)
def getBrokerList(self, status_list): page = 0 page_size = 100 broker_list = [] columns = [] while True: res = self.sendJSON(MessageBuilder.getBrokerList( status_list, None, page, page_size )) columns = res.get('Columns') broker_list.extend(res.get('BrokerListGrp')) if len(res.get('BrokerListGrp')) < page_size: break page += 1 return broker_list, columns
def process_code_pipeline(event): if 'execution-id' not in event['detail']: logger.debug("Skipping due to no executionId") return build_info = BuildInfo.from_event(event) existing_msg = find_message_for_build(build_info) builder = MessageBuilder(build_info, existing_msg) builder.update_pipeline_event(event) if builder.needs_revision_info(): revision = find_revision_info(build_info) builder.attach_revision_info(revision) post_build_msg(builder)
def processCodePipeline(event): # logger.info("processCodePipeline") if is_skip_codepipeline_notice(event['detail'].get('eventName')): return build_info = BuildInfo.from_event(event) existing_msg = find_message_for_build(build_info) # logger.info("existing_msg: {}".format(existing_msg)) builder = MessageBuilder(build_info, existing_msg) builder.updatePipelineEvent(event) if builder.needsRevisionInfo(): revision = findRevisionInfo(build_info) builder.attachRevisionInfo(revision) post_build_msg(builder)
def index(request, wx): global router_error, router_reply wxlogger = logging.getLogger('weixin') r = redis.StrictRedis(host='localhost', port=6379, db=0) if request.method == 'GET': if 'signature' not in request.GET or 'timestamp' not in request.GET or 'nonce' not in request.GET or 'echostr' not in request.GET: return HttpResponse('bad request %s' % str(request.GET)) signature = request.GET['signature'] timestamp = request.GET['timestamp'] nonce = request.GET['nonce'] echostr = request.GET['echostr'] wxlogger.info("receive one get message signature %s timestamp %s nonce %s echostr %s" % (signature, timestamp, nonce, echostr)) token = cache.get('wx_%s_token' % wx) weixin = WeiXin.on_connect(token, timestamp, nonce, signature, echostr) if weixin.validate(): return HttpResponse(echostr, content_type="text/plain") else: return HttpResponse(None, content_type="text/plain") elif request.method == 'POST': try: weixin = WeiXin.on_message(smart_str(request.raw_post_data)) message = weixin.to_json() wx_account = WXAccount.objects.get(id=wx) wx_account.message_count += 1 wx_account.save() wxlogger.info("receive one message %s" % str(message)) if message['MsgType'] == 'event' and message['Event'] == 'subscribe': walluser, created = WallUser.objects.get_or_create(wx=wx_account, openid=message['FromUserName']) walluser.wall_item_id='0' walluser.save() r.rpush('userList', message['FromUserName']) wxlogger.info("我要订阅") if message['MsgType'] == 'text' or message['MsgType'] == 'image' or message['MsgType'] == 'voice': wxlogger.info("我想上墙") wxlogger.info(len(WallUser.objects.filter(wx=wx_account, openid=message['FromUserName']))) if not len(WallUser.objects.filter(wx=wx_account, openid=message['FromUserName']))==0: walluser = WallUser.objects.filter(wx=wx_account, openid=message['FromUserName'])[0] #wxlogger.info('walluser is %s' % message['FromUserName']) if not walluser.wall_item_id == '0':#说明上墙了 #对上墙活动的进行时间进行判断,有可能上墙了但活动已经结束了 wallitem = WallItem.objects.filter(id=walluser.wall_item_id) if len(wallitem) == 0: walluser.wall_item_id = '0' walluser.save() reply_str = "活动不存在" reply_config = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, MessageBuilder.PLATFORM_WEIXIN, reply_str) return HttpResponse(MessageBuilder.build(message, reply_config), content_type="application/xml") else: wallitem = wallitem[0] #结束时间10分钟后的处理 #if (datetime.now()-wallitem.begin_time).seconds <= 600: if datetime.now()<wallitem.end_time:#说明在上墙时间内 if message['MsgType'] == 'text' or message['MsgType'] == 'voice': message_str = "" if message['MsgType'] == 'text': message_str = message['Content'] else: message_str = message['Recognition'] if not message_str == "退出": wxlogger.info('receive message %s' % message_str) WallMsg.objects.create(user=walluser, type='text', content=message_str, wall_item_id=walluser.wall_item_id) reply_str = "发送成功" wxlogger.info(datetime.now()) reply_config = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, MessageBuilder.PLATFORM_WEIXIN, reply_str) return HttpResponse(MessageBuilder.build(message, reply_config), content_type="application/xml") else:#quit the wall walluser.wall_item_id = '0' walluser.save() reply_str = "退出成功" reply_config = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, MessageBuilder.PLATFORM_WEIXIN, reply_str) return HttpResponse(MessageBuilder.build(message, reply_config), content_type="application/xml") else:#image WallMsg.objects.create(user=walluser, type=message['MsgType'], content=message['PicUrl'], wall_item_id=walluser.wall_item_id) reply_str = "发送成功" reply_config = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, MessageBuilder.PLATFORM_WEIXIN, reply_str) return HttpResponse(MessageBuilder.build(message, reply_config), content_type="application/xml") if (datetime.now()-wallitem.end_time).seconds <= 600:#超出上墙时间不到10分钟 reply_str = "活动已结束,您将在10分钟之后自动退出该活动,您也可以回复“退出”直接退出该活动。" reply_config = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, MessageBuilder.PLATFORM_WEIXIN, reply_str) return HttpResponse(MessageBuilder.build(message, reply_config), content_type="application/xml") else: walluser.wall_item_id = '0' walluser.save() wxlogger.info("活动已经结束超过10分钟,您已经被系统退出上墙。") reply_str = "活动已经结束超过10分钟,您已经被系统退出上墙。" reply_config = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, MessageBuilder.PLATFORM_WEIXIN, reply_str) return HttpResponse(MessageBuilder.build(message, reply_config), content_type="application/xml") else:#说明没有上墙 if message['MsgType'] == 'text': wxlogger.info(message) wxlogger.info("说明没有上墙") if not len(WallItem.objects.filter(wx=wx_account)) == 0:#说明该微信号有微信墙活动 for wallitem in WallItem.objects.filter(wx=wx_account): if message['Content']==wallitem.keyword:#说明有上墙的关键字 reply_str = "" if datetime.now()<wallitem.begin_time:#没有开始 reply_str = "活动未开始,请在活动开始("+str(wallitem.begin_time)+")之后再发送消息。" elif datetime.now()>wallitem.end_time:#说明已经结束 reply_str = "活动已结束" else: wxlogger.info(wallitem.welcome) walluser.wall_item_id = wallitem.id walluser.save() if judge_symbol(wallitem.welcome): reply_str = wallitem.welcome+'回复“退出”则退出上墙。' else: reply_str = wallitem.welcome+','+'回复“退出”则退出上墙。' reply_config = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, MessageBuilder.PLATFORM_WEIXIN, reply_str) return HttpResponse(MessageBuilder.build(message, reply_config), content_type="application/xml") Router.get_instance().reply(wx, message, _route_callback) if router_error is None and router_reply is not None: router_reply.platform = MessageBuilder.PLATFORM_WEIXIN if router_reply.type != MessageBuilder.TYPE_NO_RESPONSE: wxlogger.info("reply success type %s platform %s data %s" % (router_reply.type, router_reply.platform, router_reply.data)) return HttpResponse(MessageBuilder.build(message, router_reply), content_type="application/xml") else: wxlogger.info("%s", router_reply.data) else: wxlogger.info("router error %s router reply %s" % (str(router_error), str(router_reply))) reply_config = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, MessageBuilder.PLATFORM_WEIXIN, u"抱歉,我不是很明白") return HttpResponse(MessageBuilder.build(message, reply_config), content_type="application/xml") #return HttpResponse('<xml></xml>', content_type="application/xml") except: wxlogger.error(traceback.format_exc()) reply_config = BuildConfig(MessageBuilder.TYPE_RAW_TEXT, MessageBuilder.PLATFORM_WEIXIN, u"抱歉,我不是很明白。") return HttpResponse(MessageBuilder.build(message, reply_config), content_type="application/xml")