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)
Beispiel #2
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
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)
Beispiel #9
0
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)
Beispiel #10
0
  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)
Beispiel #12
0
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)
Beispiel #13
0
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")