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
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
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)
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)
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)
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)