Example #1
0
def getSettingDict(projectelement, userelement):

    isowner = False
    if (projectelement.owner_uid.id == userelement.id):
        isowner = True

    categorydata = json.loads(get_config('app_categories'))
    platformdata = json.loads(get_config('app_platforms'))
    stagedata = json.loads(get_config('app_stages'))

    platformnum = get_dict_value_matchin_number(platformdata,
                                                projectelement.platform)
    categorynum = get_dict_value_matchin_number(categorydata,
                                                projectelement.category)
    stagenum = get_dict_value_matchin_number(stagedata, projectelement.stage)

    platformtxt = get_dict_value_matchin_key(platformdata,
                                             projectelement.platform)

    count = 0
    for zone in pytz.common_timezones:
        if (zone == projectelement.timezone):
            break
        count += 1

    #print len(pytz.common_timezones)
    #print 'getSettingDict' + str(count)

    viewerlist = []

    ViewerElements = Viewer.objects.select_related().filter(
        ~Q(uid=userelement.id), pid=projectelement.pid)
    for v in ViewerElements:
        a = v.uid
        viewerlist.append(a.username)

    dict = {
        'platform_number': platformnum + 1,
        'stage_number': stagenum + 1,
        'category_number': categorynum + 1,
        'timezonelist': pytz.common_timezones,
        'timezone_number': count + 1,
        'project_viewerlist': viewerlist,
        'owner_user': isowner,
        'app_platformlist': platformdata.items(),
        'app_categorylist': categorydata.items(),
        'app_stagelist': stagedata.items(),
        'project_name': projectelement.name,
        'project_platform': platformtxt,
        'map_file_list': Proguardmap.objects.filter(pid=projectelement),
    }
    for mapfile in dict['map_file_list']:
        mapfile.date = toTimezone(
            mapfile.uploadtime, projectelement.timezone).__format__('%Y.%m.%d')
        mapfile.time = toTimezone(mapfile.uploadtime,
                                  projectelement.timezone).__format__('%H:%M')
    #print dict['map_file_list']
    return dict
Example #2
0
def getSettingDict(projectelement,userelement):

    isowner = False
    if(projectelement.owner_uid.id == userelement.id):
        isowner = True

    categorydata = json.loads(get_config('app_categories'))
    platformdata = json.loads(get_config('app_platforms'))
    stagedata = json.loads(get_config('app_stages'))

    platformnum = get_dict_value_matchin_number(platformdata,projectelement.platform)
    categorynum = get_dict_value_matchin_number(categorydata,projectelement.category)
    stagenum = get_dict_value_matchin_number(stagedata,projectelement.stage)

    platformtxt = get_dict_value_matchin_key(platformdata,projectelement.platform)

    count = 0
    for zone in pytz.common_timezones:
        if( zone == projectelement.timezone):
            break;
        count += 1

    #print len(pytz.common_timezones)
    #print 'getSettingDict' + str(count)

    viewerlist = []



    ViewerElements = Viewer.objects.select_related().filter(~Q(uid= userelement.id) ,pid = projectelement.pid)
    for v in ViewerElements:
        a = v.uid
        viewerlist.append(a.username)

    dict = {
        'platform_number' : platformnum + 1,
        'stage_number' : stagenum + 1,
        'category_number' : categorynum + 1,
        'timezonelist' : pytz.common_timezones,
        'timezone_number' : count + 1,
        'project_viewerlist' : viewerlist,
        'owner_user' : isowner,
        'app_platformlist' : platformdata.items(),
        'app_categorylist' : categorydata.items(),
        'app_stagelist' : stagedata.items(),
        'project_name' : projectelement.name,
        'project_platform' : platformtxt,
        'map_file_list' : Proguardmap.objects.filter(pid = projectelement),
    }
    for mapfile in dict['map_file_list']:
        mapfile.date = toTimezone(mapfile.uploadtime,projectelement.timezone).__format__('%Y.%m.%d')
        mapfile.time = toTimezone(mapfile.uploadtime,projectelement.timezone).__format__('%H:%M')
    #print dict['map_file_list']
    return dict
Example #3
0
def projects(request):

    if not request.user.is_authenticated():
        return HttpResponseRedirect('/urqa/')


    if request.user.is_superuser:
        #Super User일 경우 모든 프로젝트 보이기
        MergeProjectElements = Projects.objects.all()

    else:
        #주인인 project들
        UserElement = AuthUser.objects.get(username = request.user)
        OwnerProjectElements = Projects.objects.filter(owner_uid = UserElement.id)

        ViewerElements = Viewer.objects.filter(uid = UserElement.id).values('pid')
        ViewerProjectElements = Projects.objects.filter(pid__in = ViewerElements)
        MergeProjectElements = OwnerProjectElements | ViewerProjectElements


    #print MergeProjectElements

    project_list = []

    stagedata = json.loads(get_config('app_stages'))
    #stagecolordata = json.loads(get_config('app_stages_color'))
    #avgcolordata = json.loads(get_config('avg_error_score_color'))
    countcolordata = json.loads(get_config('error_rate_color'))
    platformdata = json.loads(get_config('app_platforms'))

    for idx, project in enumerate(MergeProjectElements):
        projectdata = {}
        projectdata['apikey'] = project.apikey
        #stage color 구하기
        stagetxt = get_dict_value_matchin_key(stagedata,project.stage)
        #projectdata['color'] = stagecolordata.get(stagetxt)

        week, today = getTimeRange(TimeRange.weekly,project.timezone)#최근 7일이내것만 표시

        errorElements = Errors.objects.filter(pid = project.pid, status__in = [Status.New,Status.Open])
        instanceCount = Instances.objects.filter(iderror__in=errorElements,datetime__range = (week, today)).count()
        apprunCount = Appruncount.objects.filter(pid=project.pid,date__range = (week, today)).aggregate(apprunCount=Sum('runcount'))['apprunCount']
        #print instanceCount
        #print '(week, today)',project.pid,(week, today)
        #print Appruncount.objects.filter(pid=project.pid,date__gte = week)
        #print apprunCount
        projectdata['count'] =  instanceCount
        if not apprunCount:
            errorRate = 0
        else:
            errorRate = int(instanceCount * 100.0 / apprunCount)

        print project.name, 'errorRate %d%%' % errorRate, instanceCount, apprunCount
        #Avg ErrorScore에 대한 컬러
        projectdata['color'] = ErrorRate_for_color( countcolordata , errorRate )
        #print projectdata['color']

        projectdata['name'] = project.name
        projectdata['platform'] = get_dict_value_matchin_key(platformdata,project.platform).lower()
        projectdata['stage'] = stagetxt
        project_list.append(projectdata)





    categorydata = json.loads(get_config('app_categories'))
    platformdata = json.loads(get_config('app_platforms'))
    stagedata = json.loads(get_config('app_stages'))

    ctx = {
        'project_list' : project_list ,
        'app_platformlist' : platformdata.items(),
        'app_categorylist' : categorydata.items(),
        'app_stagelist' : stagedata.items()
    }
    return render(request, 'project-select.html', ctx)
Example #4
0
def projects(request):
    #Project리스트를 출력하는 루틴
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/urqa/')

    project_list = []

    stagedata = json.loads(get_config('app_stages'))
    #stagecolordata = json.loads(get_config('app_stages_color'))
    #avgcolordata = json.loads(get_config('avg_error_score_color'))
    countcolordata = json.loads(get_config('error_rate_color'))
    platformdata = json.loads(get_config('app_platforms'))

    if request.user.is_superuser:
        MergeProjectElements = Projects.objects.filter()
    else:
        #User가 소유한 Project를 얻어온다.
        UserElement = AuthUser.objects.get(username=request.user)
        OwnerProjectElements = Projects.objects.filter(
            owner_uid=UserElement.id)

        ViewerElements = Viewer.objects.filter(
            uid=UserElement.id).values('pid')
        ViewerProjectElements = Projects.objects.filter(pid__in=ViewerElements)
        MergeProjectElements = OwnerProjectElements | ViewerProjectElements

    #print MergeProjectElements
    idxProjectList = []
    placesDict = {}
    apprunDit = {}
    for idx, project in enumerate(MergeProjectElements):
        idxProjectList.append(project.pid)
        past, today = getTimeRange(TimeRange.weekly,
                                   project.timezone)  #최근 7일이내것만 표시

    #idxProjectList = Projects.objects.values_list('pid')

    if idxProjectList:
        pasttime = '%d-%d-%d %d:%d:%d' % (past.year, past.month, past.day,
                                          past.hour, past.minute, past.second)
        #pidList = ", ".join(str(v) for v in idxProjectList)

        pasttime = '%d-%d-%d %d:%d:%d' % (2014, 12, 3, 12, 0, 0)

        #pid_list = [str(project) for project in Projects.objects.values_list('pid')]
        #places = Instances.objects.values('iderror').annotate(count=Count('iderror')).prefech_selected('iderror').filter(
        #    iderror__pid__in=pidList,
        #    datetime__gt=pasttime
        #).group_by('iderror__pid')

        pidList = ", ".join(str(v) for v in idxProjectList)

        sql = "SELECT B.pid AS pid, count(*) AS count FROM errors B JOIN instances A ON A.iderror = B.iderror "
        sql = sql + "where B.pid IN ( " + pidList + ") "
        sql = sql + "and B.status IN (0,1) "
        sql = sql + "and A.datetime > %(pasttime)s "
        sql = sql + "GROUP BY B.pid "

        params = {
            'pidinput':
            "(" + ",".join(str(v) for v in idxProjectList) + ")",
            'pasttime':
            '%d-%d-%d %d:%d:%d' % (past.year, past.month, past.day, past.hour,
                                   past.minute, past.second)
        }
        places = LoginErrorCountModel.objects.raw(sql, params)

        for idx, pl in enumerate(places):
            placesDict[pl.pid] = pl.count

        sql = "SELECT app.pid AS pid ,SUM(app.appruncount) AS count FROM appruncount2 app "
        sql = sql + "WHERE app.pid in (" + pidList + ") AND "
        sql = sql + "app.datetime > %(pasttime)s "
        sql = sql + "GROUP BY app.pid"
        apprunCount = LoginApprunCount.objects.raw(sql, params)

        for idx, app in enumerate(apprunCount):
            apprunDit[app.pid] = app.count

    for idx, project in enumerate(MergeProjectElements):
        projectdata = {}
        projectdata['apikey'] = project.apikey
        #stage color 구하기
        stagetxt = get_dict_value_matchin_key(stagedata, project.stage)

        instanceCount = 0
        if placesDict.has_key(project.pid):
            instanceCount = instanceCount + placesDict[project.pid]

        if request.user.is_superuser and instanceCount == 0:
            continue

        #Project에서 사용자의 수를 얻어온다

        apprunCount = float('1')
        if apprunDit.has_key(project.pid):
            apprunCount = float(apprunDit.get(project.pid))

        #프로젝트 DAU대비 Error수를 측정한다.
        projectdata['count'] = instanceCount
        convertData = float(instanceCount)
        if not apprunCount:
            errorRate = 0
        else:
            errorRate = int(convertData * 100.0 / apprunCount)

        #Error발생 비율에 따라 Project의 컬러를 설정한다.
        projectdata['color'] = ErrorRate_for_color(countcolordata, errorRate)
        #print projectdata['color']

        projectdata['name'] = project.name
        projectdata['platform'] = get_dict_value_matchin_key(
            platformdata, project.platform).lower()
        projectdata['stage'] = stagetxt
        project_list.append(projectdata)

    #로딩한 데이터를 Template에 Randering한다.
    categorydata = json.loads(get_config('app_categories'))
    platformdata = json.loads(get_config('app_platforms'))
    sorted_platform = []
    for key in sorted(platformdata, key=lambda key: platformdata[key]):
        sorted_platform.append((key, platformdata[key]))

    stagedata = json.loads(get_config('app_stages'))

    ctx = {
        # 'project_list' : project_list ,
        'project_list': project_list,
        'app_platformlist': sorted_platform,
        'app_categorylist': categorydata.items(),
        'app_stagelist': stagedata.items(),
        'user': request.user
    }

    response_type = request.GET.get('response_type', None)

    if response_type == 'json':
        return HttpResponse(json.dumps(project_list))

    return render(request, 'project-select.html', ctx)
Example #5
0
def projects(request):

    if not request.user.is_authenticated():
        return HttpResponseRedirect('/urqa/')

    #주인인 project들
    UserElement = AuthUser.objects.get(username=request.user)
    OwnerProjectElements = Projects.objects.filter(owner_uid=UserElement.id)

    ViewerElements = Viewer.objects.filter(uid=UserElement.id).values('pid')
    ViewerProjectElements = Projects.objects.filter(pid__in=ViewerElements)

    MergeProjectElements = OwnerProjectElements | ViewerProjectElements

    #print MergeProjectElements

    project_list = []

    stagedata = json.loads(get_config('app_stages'))
    #stagecolordata = json.loads(get_config('app_stages_color'))
    #avgcolordata = json.loads(get_config('avg_error_score_color'))
    countcolordata = json.loads(get_config('error_rate_color'))
    platformdata = json.loads(get_config('app_platforms'))

    week, today = getTimeRange(TimeRange.weekly)  #최근 7일이내것만 표시

    for idx, project in enumerate(MergeProjectElements):
        projectdata = {}
        projectdata['apikey'] = project.apikey
        #stage color 구하기
        stagetxt = get_dict_value_matchin_key(stagedata, project.stage)
        #projectdata['color'] = stagecolordata.get(stagetxt)

        errorElements = Errors.objects.filter(
            pid=project.pid, status__in=[Status.New, Status.Open])
        instanceCount = Instances.objects.filter(
            iderror__in=errorElements, datetime__range=(week, today)).count()
        apprunCount = Appruncount.objects.filter(
            pid=project.pid, date__range=(week, today)).aggregate(
                apprunCount=Sum('runcount'))['apprunCount']
        #print instanceCount
        #print '(week, today)',project.pid,(week, today)
        #print Appruncount.objects.filter(pid=project.pid,date__gte = week)
        #print apprunCount
        projectdata['count'] = instanceCount
        if not apprunCount:
            errorRate = 0
        else:
            errorRate = int(instanceCount * 100.0 / apprunCount)

        print project.name, 'errorRate %d%%' % errorRate, instanceCount, apprunCount
        #Avg ErrorScore에 대한 컬러
        projectdata['color'] = ErrorRate_for_color(countcolordata, errorRate)
        #print projectdata['color']

        projectdata['name'] = project.name
        projectdata['platform'] = get_dict_value_matchin_key(
            platformdata, project.platform).lower()
        projectdata['stage'] = stagetxt
        project_list.append(projectdata)

    categorydata = json.loads(get_config('app_categories'))
    platformdata = json.loads(get_config('app_platforms'))
    stagedata = json.loads(get_config('app_stages'))

    ctx = {
        'project_list': project_list,
        'app_platformlist': platformdata.items(),
        'app_categorylist': categorydata.items(),
        'app_stagelist': stagedata.items()
    }
    return render(request, 'project-select.html', ctx)
Example #6
0
def projects(request):
    #Project리스트를 출력하는 루틴
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/urqa/')

    project_list = []

    stagedata = json.loads(get_config('app_stages'))
    #stagecolordata = json.loads(get_config('app_stages_color'))
    #avgcolordata = json.loads(get_config('avg_error_score_color'))
    countcolordata = json.loads(get_config('error_rate_color'))
    platformdata = json.loads(get_config('app_platforms'))

    if request.user.is_superuser:
        MergeProjectElements = Projects.objects.filter()
    else :
        #User가 소유한 Project를 얻어온다.
        UserElement = AuthUser.objects.get(username = request.user)
        OwnerProjectElements = Projects.objects.filter(owner_uid = UserElement.id)

        ViewerElements = Viewer.objects.filter(uid = UserElement.id).values('pid')
        ViewerProjectElements = Projects.objects.filter(pid__in = ViewerElements)
        MergeProjectElements = OwnerProjectElements | ViewerProjectElements


    #print MergeProjectElements
    idxProjectList = [];
    placesDict = {};
    apprunDit = {};
    for idx, project in enumerate(MergeProjectElements):
        idxProjectList.append(project.pid);
        past, today = getTimeRange(TimeRange.weekly,project.timezone)#최근 7일이내것만 표시

    #idxProjectList = Projects.objects.values_list('pid')

    if idxProjectList:
        pasttime = '%d-%d-%d %d:%d:%d' % (past.year,past.month,past.day,past.hour,past.minute,past.second)
        #pidList = ", ".join(str(v) for v in idxProjectList)


        pasttime = '%d-%d-%d %d:%d:%d' % (2014,12,3,12,0,0)

        #pid_list = [str(project) for project in Projects.objects.values_list('pid')]
        #places = Instances.objects.values('iderror').annotate(count=Count('iderror')).prefech_selected('iderror').filter(
        #    iderror__pid__in=pidList,
        #    datetime__gt=pasttime
        #).group_by('iderror__pid')

        pidList = ", ".join(str(v) for v in idxProjectList)

        sql = "SELECT B.pid AS pid, count(*) AS count FROM errors B JOIN instances A ON A.iderror = B.iderror "
        sql = sql + "where B.pid IN ( " + pidList +") "
        sql = sql + "and B.status IN (0,1) "
        sql = sql + "and A.datetime > %(pasttime)s "
        sql = sql + "GROUP BY B.pid "
        
        params = {'pidinput': "(" + ",".join(str(v) for v in idxProjectList)+")" ,'pasttime':'%d-%d-%d %d:%d:%d' % (past.year,past.month,past.day,past.hour,past.minute,past.second)}
        places = LoginErrorCountModel.objects.raw(sql, params)

        for idx,pl in enumerate(places):
            placesDict[pl.pid]=pl.count

        sql = "SELECT app.pid AS pid ,SUM(app.appruncount) AS count FROM appruncount2 app "
        sql = sql + "WHERE app.pid in (" + pidList + ") AND "
        sql = sql + "app.datetime > %(pasttime)s "
        sql = sql + "GROUP BY app.pid"
        apprunCount = LoginApprunCount.objects.raw(sql, params);

        for idx, app in enumerate(apprunCount):
            apprunDit[app.pid]  = app.count

    for idx, project in enumerate(MergeProjectElements):
        projectdata = {}
        projectdata['apikey'] = project.apikey
        #stage color 구하기
        stagetxt = get_dict_value_matchin_key(stagedata,project.stage)

        instanceCount = 0;
        if placesDict.has_key(project.pid):
            instanceCount = instanceCount + placesDict[project.pid]

        if request.user.is_superuser and instanceCount == 0:
            continue

        #Project에서 사용자의 수를 얻어온다

        apprunCount = float('1')
        if apprunDit.has_key(project.pid):
            apprunCount = float(apprunDit.get(project.pid))

        #프로젝트 DAU대비 Error수를 측정한다.
        projectdata['count'] =  instanceCount
        convertData = float(instanceCount)
        if not apprunCount:
            errorRate = 0
        else:
            errorRate = int(convertData * 100.0 / apprunCount)


        #Error발생 비율에 따라 Project의 컬러를 설정한다.
        projectdata['color'] = ErrorRate_for_color( countcolordata , errorRate )
        #print projectdata['color']

        projectdata['name'] = project.name
        projectdata['platform'] = get_dict_value_matchin_key(platformdata,project.platform).lower()
        projectdata['stage'] = stagetxt
        project_list.append(projectdata)

    
    #로딩한 데이터를 Template에 Randering한다.
    categorydata = json.loads(get_config('app_categories'))
    platformdata = json.loads(get_config('app_platforms'))
    sorted_platform = [];
    for key in sorted(platformdata, key=lambda key: platformdata[key]):
        sorted_platform.append((key,platformdata[key]))

    stagedata = json.loads(get_config('app_stages'))

    ctx = {
        # 'project_list' : project_list ,
        'project_list' : project_list,
        'app_platformlist' : sorted_platform,
        'app_categorylist' : categorydata.items(),
        'app_stagelist' : stagedata.items(),
        'user' : request.user
    }



    return render(request, 'project-select.html', ctx)