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 instanceeventpath(request, apikey, iderror, idinstance): #Instance의 개별 EventPath를 얻어온다. #권한 있나 없나 체크 valid , message , user ,ErrorsElement, projectelement = author_check_error_page(request.user, apikey, iderror) if not valid: print message return HttpResponseRedirect('/urqa') instanceElement = Instances.objects.get(idinstance = idinstance) EventPathElements = Eventpaths.objects.filter(idinstance = instanceElement).order_by('depth') #Event Path에는 시간, 클래스이름, 라인수, 사용자 Tag데이터가 들어간다. eventpathlist = [] for eventpath in EventPathElements: adtimezone = toTimezone(eventpath.datetime,projectelement.timezone) eventpathttuple = {'date' : '' , 'time' : '', 'class' : '', 'methodline' : ''} eventpathttuple['date'] =adtimezone.__format__('%Y.%m.%d') eventpathttuple['time'] =adtimezone.__format__('%H:%M:%S') eventpathttuple['class'] = eventpath.classname eventpathttuple['methodline'] = str(eventpath.methodname) + ':' + str(eventpath.linenum) eventpathlist.append(eventpathttuple) #print 'evd',eventpath.depth return HttpResponse(json.dumps(eventpathlist),'application/json')
def newComment(request, apikey, iderror): #Error에 Comment를 생성함. #커맨드를 생성한 사용자가 Project에 Comment를 쓸수있는지 검증 result, msg, userElement, projectElement, errorElement = validUserPjtError( request.user, apikey, iderror) print msg if not result: return HttpResponse(msg) time = utility.getUTCDatetime() datetime = naive2aware(time) #입력받은 POST데이터에서 comment받아옴 comment = request.POST['comment'] element = Comments.objects.create(uid=userElement, iderror=errorElement, datetime=datetime, comment=comment) #타임존을 적용한다. adtimezone = toTimezone(datetime, projectElement.timezone) print 'newcommand', adtimezone, datetime dict = { 'imgsrc': userElement.image_path, 'name': userElement.last_name + userElement.first_name, 'message': comment, 'date': adtimezone.__format__('%Y.%m.%d<br>%H:%M:%S'), 'id': element.idcomment } print dict return HttpResponse(json.dumps(dict), 'application/json')
def instanceeventpath(request, apikey, iderror, idinstance): #Instance의 개별 EventPath를 얻어온다. #권한 있나 없나 체크 valid, message, user, ErrorsElement, projectelement = author_check_error_page( request.user, apikey, iderror) if not valid: print message return HttpResponseRedirect('/urqa') instanceElement = Instances.objects.get(idinstance=idinstance) EventPathElements = Eventpaths.objects.filter( idinstance=instanceElement).order_by('depth') #Event Path에는 시간, 클래스이름, 라인수, 사용자 Tag데이터가 들어간다. eventpathlist = [] for eventpath in EventPathElements: adtimezone = toTimezone(eventpath.datetime, projectelement.timezone) eventpathttuple = { 'date': '', 'time': '', 'class': '', 'methodline': '' } eventpathttuple['date'] = adtimezone.__format__('%Y.%m.%d') eventpathttuple['time'] = adtimezone.__format__('%H:%M:%S') eventpathttuple['class'] = eventpath.classname eventpathttuple['methodline'] = str(eventpath.methodname) + ':' + str( eventpath.linenum) eventpathlist.append(eventpathttuple) #print 'evd',eventpath.depth return HttpResponse(json.dumps(eventpathlist), 'application/json')
def instancedetatil(request, apikey, iderror, idinstance): #Instance Data의 자세한 내용을 표시 #권한 있나 없나 체크 valid, message, user, ErrorsElement, projectelement = author_check_error_page( request.user, apikey, iderror) if not valid: print message return HttpResponseRedirect('/urqa') #instance정보 instance = Instances.objects.filter(idinstance=int(idinstance)).values() #dict = instance.objects.values() #datetime은 json sealize 안되서 .... key_to_remove = 'datetime' #인스턴스테이블에 있는 애러 시간, 발생 클래스, 위치 기타 등등을 얻어와 웹에 보여줌 dict = { key: value for key, value in instance[0].items() if key != key_to_remove } adtimezone = toTimezone(instance[0]['datetime'], projectelement.timezone) dict['datetime'] = adtimezone.__format__('%Y.%m.%d - %H:%M:%S') result = json.dumps(dict) #single 즉 get일땐 __dict__ filter 즉 복수 일땐 obejcts.values() 이것때문에 한시간 날림 return HttpResponse(result, 'application/json')
def newComment(request, apikey, iderror): #Error에 Comment를 생성함. #커맨드를 생성한 사용자가 Project에 Comment를 쓸수있는지 검증 result, msg, userElement, projectElement, errorElement = validUserPjtError(request.user,apikey,iderror) print msg if not result: return HttpResponse(msg) time = utility.getUTCDatetime() datetime = naive2aware(time) #입력받은 POST데이터에서 comment받아옴 comment = request.POST['comment'] element = Comments.objects.create(uid=userElement, iderror=errorElement, datetime=datetime, comment=comment) #타임존을 적용한다. adtimezone = toTimezone(datetime,projectElement.timezone) print 'newcommand',adtimezone,datetime dict = {'imgsrc':userElement.image_path, 'name': userElement.last_name + userElement.first_name, 'message': comment, 'date': adtimezone.__format__('%Y.%m.%d<br>%H:%M:%S'), 'id' : element.idcomment} print dict return HttpResponse(json.dumps(dict), 'application/json')
def dailyesgraph(request, apikey): #기본 데이터 default = { "max":{"key":5, "value":0}, "tags":[ ] } #프로젝트 ID에 맞는 에러들을 가져오기 위함 try: ProjectElement = Projects.objects.get(apikey= apikey) except ObjectDoesNotExist: print 'invalid pid' return HttpResponse(json.dumps(default), 'application/json'); #오늘 날짜 및 일주일 전을 계산 timerange = TimeRange.weekly week , today = getTimeRange(timerange,ProjectElement.timezone) #defalut값에 날짜를 대입함 maxvalue = 0 errorElements = Errors.objects.filter(pid=ProjectElement,lastdate__range=(week , today)) for i in range(0,timerange): value = {'key' : 0 , 'value' : 0} begin_date = today + datetime.timedelta(days = i-(timerange) ) end_date = today + datetime.timedelta(days = i-(timerange-1) ) instanceCount = Instances.objects.filter(iderror__in=errorElements,datetime__range=(begin_date,end_date)).count() #instanceCount = Instancecount.objects.filter(pid = ProjectElement,date=tmpdate).aggregate(Sum('count'))['count__sum'] if instanceCount: value['value'] = instanceCount if maxvalue < instanceCount: #maxvalue! maxvalue = instanceCount else: value['value'] = 0 #timezone 적용 adtimezone = toTimezone(end_date,ProjectElement.timezone) value['key'] = adtimezone.__format__('%m / %d') default['tags'].append(value) default['max']['key'] = len(default['tags']) default['max']['value'] = maxvalue #print 'default',default return HttpResponse(json.dumps(default),'application/json')
def dailyesgraph(request, apikey): #기본 데이터 default = {"max": {"key": 5, "value": 0}, "tags": []} #프로젝트 ID에 맞는 에러들을 가져오기 위함 try: ProjectElement = Projects.objects.get(apikey=apikey) except ObjectDoesNotExist: print 'invalid pid' return HttpResponse(json.dumps(default), 'application/json') #오늘 날짜 및 일주일 전을 계산 timerange = TimeRange.weekly week, today = getTimeRange(timerange) #defalut값에 날짜를 대입함 maxvalue = 0 errorElements = Errors.objects.filter(pid=ProjectElement, lastdate__range=(week, today)) for i in range(0, timerange): value = {'key': 0, 'value': 0} begin_date = today + datetime.timedelta(days=i - (timerange)) end_date = today + datetime.timedelta(days=i - (timerange - 1)) instanceCount = Instances.objects.filter( iderror__in=errorElements, datetime__range=(begin_date, end_date)).count() #instanceCount = Instancecount.objects.filter(pid = ProjectElement,date=tmpdate).aggregate(Sum('count'))['count__sum'] if instanceCount: value['value'] = instanceCount if maxvalue < instanceCount: #maxvalue! maxvalue = instanceCount else: value['value'] = 0 #timezone 적용 adtimezone = toTimezone(end_date, ProjectElement.timezone) value['key'] = adtimezone.__format__('%m / %d') default['tags'].append(value) default['max']['key'] = len(default['tags']) default['max']['value'] = maxvalue #print 'default',default return HttpResponse(json.dumps(default), 'application/json')
def instancedetatil(request, apikey, iderror, idinstance): #권한 있나 없나 체크 valid , message , user ,ErrorsElement, projectelement = author_check_error_page(request.user, apikey, iderror) if not valid: print message return HttpResponseRedirect('/urqa') #instance정보 instance = Instances.objects.filter(idinstance = int(idinstance)).values() #dict = instance.objects.values() #datetime은 json sealize 안되서 .... key_to_remove = 'datetime' dict = {key : value for key, value in instance[0].items() if key != key_to_remove} adtimezone = toTimezone(instance[0]['datetime'],projectelement.timezone) dict['datetime'] = adtimezone.__format__('%Y.%m.%d - %H:%M:%S') result = json.dumps(dict) #single 즉 get일땐 __dict__ filter 즉 복수 일땐 obejcts.values() 이것때문에 한시간 날림 return HttpResponse(result,'application/json')
def error_list(request,apikey): username = request.user valid , message , userelement, projectelement = validUserPjt(username,apikey) if not valid: return HttpResponseRedirect('/urqa') try: projectElement = Projects.objects.get(apikey = apikey) except ObjectDoesNotExist: print 'invalid pid' return HttpResponse(json.dumps({"response":"fail"}), 'application/json'); jsonData = json.loads(request.POST['json'],encoding='utf-8') date = int(jsonData['date']) _status = [[0,1,2,3],[0],[1],[2],[3]] status = _status[int(jsonData['status'])] rank = jsonData['rank'] tags = jsonData['tags'] classes = jsonData['classes'] appversion = jsonData['appv'] if appversion and appversion[0] == 'All': appversion = [] osversion = jsonData['osv'] if osversion and osversion[0] == 'All': osversion = [] week, today = getTimeRange(date,projectElement.timezone) errorElements = Errors.objects.filter(pid=projectElement,rank__in=rank,status__in=status,lastdate__range=(week,today)).order_by('-errorweight','rank', '-lastdate') #print '1',errorElements #print classes if classes: errorElements = errorElements.filter(errorclassname__in=classes) #print tags if tags: tagElements = Tags.objects.select_related().filter(iderror__in=errorElements,tag__in=tags).values('iderror').distinct().order_by('iderror') print tagElements iderror_list = [] for e in tagElements: iderror_list.append(int(e['iderror'])) errorElements = errorElements.filter(iderror__in=iderror_list) #print appversion if appversion: print 'appversion',appversion appvElements = Appstatistics.objects.select_related().filter(iderror__in=errorElements,appversion__in=appversion).values('iderror').distinct().order_by('iderror') print 'appvElements',appvElements iderror_list = [] for e in appvElements: iderror_list.append(int(e['iderror'])) #if iderror_list: errorElements = errorElements.filter(iderror__in=iderror_list) #print osversion if osversion: osvElements = Osstatistics.objects.select_related().filter(iderror__in=errorElements,osversion__in=osversion).values('iderror').distinct().order_by('iderror') iderror_list = [] for e in osvElements: iderror_list.append(int(e['iderror'])) #if iderror_list: errorElements = errorElements.filter(iderror__in=iderror_list) #print errorElements result = [] for e in errorElements: adtimezone = toTimezone(e.lastdate,projectelement.timezone) #print adtimezone new_e = {} new_e['iderror'] = e.iderror new_e['color'] = RANK.rankcolor[e.rank] new_e['rank'] = e.rank new_e['status'] = e.status#Status.toString[e.status] new_e['errorname'] = e.errorname new_e['errorclassname'] = e.errorclassname new_e['linenum'] = e.linenum new_e['count'] = e.numofinstances new_e['year'] = adtimezone.year new_e['month'] = '%02d' % adtimezone.month new_e['day'] = '%02d' % adtimezone.day new_e['es'] = e.errorweight new_e['auto'] = e.autodetermine new_e['tags'] = [] tags = Tags.objects.filter(iderror=e) for t in tags: new_e['tags'].append(t.tag) result.append(new_e) #print new_e return HttpResponse(json.dumps(result), 'application/json')
def errorDetail(request,apikey,iderror): valid , message , user ,ErrorsElement, projectelement = author_check_error_page(request.user, apikey, iderror) if not valid: print message return HttpResponseRedirect('/urqa') # Status New일 경우 Open으로 자동변경 # SuperUser는 자동변경에서 예외 if not user.is_superuser and ErrorsElement.status == Status.New: ErrorsElement.status = Status.Open ErrorsElement.save() #manual_Auto isManual = True if ErrorsElement.autodetermine == 1: isManual = False else: isManual = True instanceElements = Instances.objects.filter(iderror = ErrorsElement).order_by('-datetime') #wifi wifi = 0 wifielements = instanceElements.filter(wifion = 1) wifi = len(wifielements) #gps gps = 0 gpselements = instanceElements.filter(gpson = 1) gps = len(gpselements) #mobilenetwork mobilenetwork = 0 mobilenetworkelements = instanceElements.filter(mobileon = 1) mobilenetwork = len(mobilenetworkelements) numobins = float(ErrorsElement.numofinstances) ###taglist### tagsElements = Tags.objects.filter(iderror = ErrorsElement) taglist = [] for tag in tagsElements: taglist.append(tag.tag) ###callstack### callstackstr = ErrorsElement.callstack if(RANK.Native == ErrorsElement.rank): callstackstrlist = callstackstr.split('\n') else: callstackstrlist = callstackstr.split('\n\t') counter = 0 callstacklist = [] compile = re.compile('\(.*?:[0-9]*?\)') nativecompile = re.compile('\[.*?:.*?\]') #print '-----------------------' for linstr in callstackstrlist: tmp = {'counter' : 0, 'source' : '', 'value' : ''} counter += 1 tmp['counter'] = counter tmp['value'] = re.sub('\(.*?:[0-9]*?\)','',linstr) #native tmp['value'] = re.sub('\[.*?:.*?\]','',tmp['value']) #print tmp['value'] list = compile.findall(linstr) nativelist = nativecompile.findall(linstr) source = '' if len(list) > 0: source = list[0] if len(nativelist) > 0: source = nativelist[0] tmp['source'] = source #print tmp['source'] callstacklist.append(tmp) #print '-----------------------' ####instance####### instancelist = [] for instance in instanceElements: instancetuple = {'datetime' : "", 'osversion' : '','appversion' : '' , 'device' : '', 'country' : '', 'idinstance' : ''} adtimezone = toTimezone(instance.datetime,projectelement.timezone) instancetuple['date'] = adtimezone.__format__('%Y.%m.%d') instancetuple['time'] = adtimezone.__format__('%H:%M:%S') instancetuple['osversion'] = instance.osversion instancetuple['appversion'] = instance.appversion instancetuple['device'] = instance.device instancetuple['country'] = instance.country instancetuple['idinstance'] = instance.idinstance instancelist.append(instancetuple) #projectelement = Projects.objects.get(apikey = apikey) platformdata = json.loads(get_config('app_platforms')) #platformtxt = get_dict_value_matchin_key(platformdata,projectelement.platform) CommentElements = Comments.objects.filter(iderror = iderror).order_by('datetime') commentlist = [] for comment in CommentElements: commenttuple = {} try: commentuser = AuthUser.objects.get(id = comment.uid.id) except ObjectDoesNotExist: continue adtimezone = toTimezone(comment.datetime,projectelement.timezone) print 'here',adtimezone,comment.datetime commenttuple['imagesrc'] = commentuser.image_path commenttuple['name'] = commentuser.first_name + ' ' + commentuser.last_name commenttuple['comment'] = comment.comment commenttuple['date'] = adtimezone.__format__('%Y.%m.%d') commenttuple['time'] = adtimezone.__format__('%H:%M:%S') commenttuple['ownercomment'] = comment.uid == user and True or False commenttuple['id'] = comment.idcomment commentlist.append(commenttuple) userdict = getUserProfileDict(user) apikeydict = getApikeyDict(apikey) settingdict = getSettingDict(projectelement,user) adtimezone_first = toTimezone(ErrorsElement.createdate,projectelement.timezone) adtimezone_last = toTimezone(ErrorsElement.lastdate,projectelement.timezone) detaildict = { 'iderror' : iderror, 'ErrorScore' : ErrorsElement.errorweight, 'isManual' : isManual, 'ErrorName' : ErrorsElement.errorname, 'ErrorFile' : '(' +ErrorsElement.errorclassname + ':' + ErrorsElement.linenum + ')', 'Errornumofinstances' : ErrorsElement.numofinstances, 'Errorrecur' : ErrorsElement.recur, 'Errorstatus' : ErrorsElement.status, 'Errorswifi' : int(wifi/numobins * 100), 'Errorsgps' : int(gps/numobins * 100), 'ErrorStatus' : ErrorsElement.status + 1, 'Errorsmobilenetwork' : int(mobilenetwork/numobins * 100), 'Errorsmemoryusage' : ErrorsElement.totalmemusage / ErrorsElement.numofinstances, 'createdate' : adtimezone_first.__format__('%Y.%m.%d'), 'lastdate' : adtimezone_last.__format__('%Y.%m.%d'), 'ErrorRankColor' : ErrorsElement.rank == RANK.Suspense and 'Nothing' or RANK.rankcolor[ErrorsElement.rank], 'isNative' : ErrorsElement.rank == RANK.Native , 'tag_list' : taglist, 'callstack' : callstacklist, 'instance_list' : instancelist, 'comment_list' : commentlist, 'so_file_list' : Sofiles.objects.filter(pid = projectelement) } ctxdict = dict(userdict.items() + apikeydict.items() + settingdict.items() + detaildict.items() ) tpl = loader.get_template('details.html') #ctx = Context(ctxdict); return render(request,'details.html',ctxdict)
def errorDetail(request, apikey, iderror): #에러의 상세한 페이지를 보여주는 루틴 valid, message, user, ErrorsElement, projectelement = author_check_error_page( request.user, apikey, iderror) if not valid: print message return HttpResponseRedirect('/urqa') # Status New일 경우 Open으로 자동변경 # SuperUser는 자동변경에서 예외 if not user.is_superuser and ErrorsElement.status == Status.New: ErrorsElement.status = Status.Open ErrorsElement.save() #manual_Auto isManual = True if ErrorsElement.autodetermine == 1: isManual = False else: isManual = True #Error에 해당하는 Instance들을 최근 100개 가져온다. instanceElements = Instances.objects.filter( iderror=ErrorsElement).order_by('-datetime')[:100] #wifi wifi = Instances.objects.filter(iderror=ErrorsElement, wifion=1).count() #gps gps = Instances.objects.filter(iderror=ErrorsElement, gpson=1).count() #mobilenetwork mobilenetwork = Instances.objects.filter(iderror=ErrorsElement, mobileon=1).count() numobins = float(ErrorsElement.numofinstances) ###taglist### tagsElements = Tags.objects.filter(iderror=ErrorsElement) taglist = [] for tag in tagsElements: taglist.append(tag.tag) ###callstack### callstackstr = ErrorsElement.callstack if (RANK.Native == ErrorsElement.rank): callstackstrlist = callstackstr.split('\n') else: callstackstrlist = callstackstr.split('\n\t') counter = 0 callstacklist = [] compile = re.compile('\(.*?:[0-9]*?\)') nativecompile = re.compile('\[.*?:.*?\]') #print '-----------------------' for linstr in callstackstrlist: tmp = {'counter': 0, 'source': '', 'value': ''} counter += 1 tmp['counter'] = counter tmp['value'] = re.sub('\(.*?:[0-9]*?\)', '', linstr) #native tmp['value'] = re.sub('\[.*?:.*?\]', '', tmp['value']) #print tmp['value'] list = compile.findall(linstr) nativelist = nativecompile.findall(linstr) source = '' if len(list) > 0: source = list[0] if len(nativelist) > 0: source = nativelist[0] tmp['source'] = source #print tmp['source'] callstacklist.append(tmp) #print '-----------------------' ####instance####### instancelist = [] instanceCount = 0 for instance in instanceElements: instancetuple = { 'datetime': "", 'osversion': '', 'appversion': '', 'device': '', 'country': '', 'idinstance': '' } adtimezone = toTimezone(instance.datetime, projectelement.timezone) instancetuple['date'] = adtimezone.__format__('%Y.%m.%d') instancetuple['time'] = adtimezone.__format__('%H:%M:%S') instancetuple['osversion'] = instance.osversion instancetuple['appversion'] = instance.appversion instancetuple['device'] = instance.device instancetuple['country'] = instance.country instancetuple['idinstance'] = instance.idinstance instancelist.append(instancetuple) instanceCount = instanceCount + 1 if instanceCount >= 100: break #projectelement = Projects.objects.get(apikey = apikey) #platformdata = json.loads(get_config('app_platforms')) #platformtxt = get_dict_value_matchin_key(platformdata,projectelement.platform) CommentElements = Comments.objects.filter( iderror=iderror).order_by('datetime') commentlist = [] for comment in CommentElements: commenttuple = {} try: commentuser = AuthUser.objects.get(id=comment.uid.id) except ObjectDoesNotExist: continue adtimezone = toTimezone(comment.datetime, projectelement.timezone) print 'here', adtimezone, comment.datetime commenttuple['imagesrc'] = commentuser.image_path commenttuple[ 'name'] = commentuser.first_name + ' ' + commentuser.last_name commenttuple['comment'] = comment.comment commenttuple['date'] = adtimezone.__format__('%Y.%m.%d') commenttuple['time'] = adtimezone.__format__('%H:%M:%S') commenttuple['ownercomment'] = comment.uid == user and True or False commenttuple['id'] = comment.idcomment commentlist.append(commenttuple) #DB에서 얻어돈 데이터들을 Web에 표시할 수 있도록 Template Rendering적용 userdict = getUserProfileDict(user) apikeydict = getApikeyDict(apikey) settingdict = getSettingDict(projectelement, user) adtimezone_first = toTimezone(ErrorsElement.createdate, projectelement.timezone) adtimezone_last = toTimezone(ErrorsElement.lastdate, projectelement.timezone) detaildict = { 'iderror': iderror, 'ErrorScore': ErrorsElement.errorweight, 'isManual': isManual, 'ErrorName': ErrorsElement.errorname, 'ErrorFile': '(' + ErrorsElement.errorclassname + ':' + ErrorsElement.linenum + ')', 'Errornumofinstances': ErrorsElement.numofinstances, 'Errorrecur': ErrorsElement.recur, 'Errorstatus': ErrorsElement.status, 'Errorswifi': int(wifi / numobins * 100), 'Errorsgps': int(gps / numobins * 100), 'ErrorStatus': ErrorsElement.status + 1, 'Errorsmobilenetwork': int(mobilenetwork / numobins * 100), 'Errorsmemoryusage': ErrorsElement.totalmemusage / ErrorsElement.numofinstances, 'createdate': adtimezone_first.__format__('%Y.%m.%d'), 'lastdate': adtimezone_last.__format__('%Y.%m.%d'), 'ErrorRankColor': ErrorsElement.rank == RANK.Suspense and 'Nothing' or RANK.rankcolor[ErrorsElement.rank], 'isNative': ErrorsElement.rank == RANK.Native, 'tag_list': taglist, 'callstack': callstacklist, 'instance_list': instancelist, 'comment_list': commentlist, 'so_file_list': Sofiles.objects.filter(pid=projectelement) } ctxdict = dict(userdict.items() + apikeydict.items() + settingdict.items() + detaildict.items()) tpl = loader.get_template('details.html') #ctx = Context(ctxdict); return render(request, 'details.html', ctxdict)
def error_list(request, apikey): #Error Filtering페이지에서 보여줄 리스트를 랜더링함 username = request.user valid, message, userelement, projectelement = validUserPjt( username, apikey) if not valid: return HttpResponseRedirect('/urqa') try: projectElement = Projects.objects.get(apikey=apikey) except ObjectDoesNotExist: print 'invalid pid' return HttpResponse(json.dumps({"response": "fail"}), 'application/json') jsonData = json.loads(request.POST['json'], encoding='utf-8') #Appstatistics.objects.values('ierror').annotate(iderror_count=Count('iderror')).filter(pid=projectElement).group_by('iderror') date = int(jsonData['date']) _status = [[0, 1, 2, 3], [0], [1], [2], [3]] status = _status[int(jsonData['status'])] rank = jsonData['rank'] tags = jsonData['tags'] classes = jsonData['classes'] appversion = jsonData['appv'] if appversion and appversion[0] == 'All': appversion = [] osversion = jsonData['osv'] if osversion and osversion[0] == 'All': osversion = [] page = jsonData['page'] num = jsonData['num'] #Filtering Query를 적용하여 해당하는 Error를 보여줌 week, today = getTimeRange(date, projectElement.timezone) ##일단 로직을 추가 하고 page, num 처리하여씀 여기서 속도가 느릴 경우 errorElements 쪽을 수정 errorElements = Errors.objects.filter( pid=projectElement, rank__in=rank, status__in=status, lastdate__range=(week, today)).order_by('-errorweight', 'rank', '-lastdate') #print '1',errorElements #print classes if classes: errorElements = errorElements.filter(errorclassname__in=classes) #print tags if tags: #tagElements = Tags.objects.filter(iderror__in=errorElements,tag__in=tags).values('iderror').distinct().order_by('iderror') tagElements = Tags.objects.select_related('iderror').filter( iderror__in=errorElements, tag__in=tags).values('iderror').distinct().order_by( 'iderror')[page * num:(page + 1) * num] print tagElements iderror_list = [] for e in tagElements: iderror_list.append(int(e['iderror'])) errorElements = errorElements.filter(iderror__in=iderror_list) #print appversion if appversion: print 'appversion', appversion appvElements = Appstatistics.objects.select_related().filter( iderror__in=errorElements, appversion__in=appversion).values( 'iderror').distinct().order_by('iderror') print 'appvElements', appvElements iderror_list = [] for e in appvElements: iderror_list.append(int(e['iderror'])) #if iderror_list: errorElements = errorElements.filter(iderror__in=iderror_list) #print osversion if osversion: iderror_list = [] for v in osversion: if v == "M. ": v = "M" osvElements = Osstatistics.objects.select_related().filter( iderror__in=errorElements, osversion__startswith=v).values( 'iderror').distinct().order_by('iderror') for e in osvElements: iderror_list.append(int(e['iderror'])) #if iderror_list: errorElements = errorElements.filter(iderror__in=iderror_list) #print errorElements errorElements = errorElements[page * num:(page + 1) * num] result = [] for e in errorElements.iterator(): adtimezone = toTimezone(e.lastdate, projectelement.timezone) #print adtimezone new_e = {} new_e['iderror'] = e.iderror new_e['color'] = RANK.rankcolor[e.rank] new_e['rank'] = e.rank new_e['status'] = e.status #Status.toString[e.status] new_e['errorname'] = e.errorname new_e['errorclassname'] = e.errorclassname new_e['linenum'] = e.linenum new_e['count'] = e.numofinstances new_e['year'] = adtimezone.year new_e['month'] = '%02d' % adtimezone.month new_e['day'] = '%02d' % adtimezone.day new_e['es'] = e.errorweight new_e['auto'] = e.autodetermine new_e['tags'] = [] tags = Tags.objects.filter(iderror=e) for t in tags: new_e['tags'].append(t.tag) result.append(new_e) #print new_e return HttpResponse(json.dumps(result), 'application/json')
def proguardmap_upload(request, apikey): print "proguardmap_upload", apikey result, msg, userElement, projectElement = validUserPjt(request.user, apikey) if not result: return HttpResponse(msg) print request.FILES appver = request.POST["appversion"] retdat = {"result": -1, "msg": "Failed to Upload File"} if request.method != "POST": retdat = {"result": -1, "msg": "Bad request"} elif len(appver) == 0: retdat = {"result": -1, "msg": "Invalid App version"} elif not "file" in request.FILES: retdat = {"result": -1, "msg": "You should select file"} else: file = request.FILES["file"] temp_fname = file._name temp_path = os.path.join(PROJECT_DIR, get_config("proguard_map_path")) if not os.path.isdir(temp_path): os.mkdir(temp_path) temp_path = os.path.join(temp_path, apikey) if not os.path.isdir(temp_path): os.mkdir(temp_path) temp_path = os.path.join(temp_path, appver) if not os.path.isdir(temp_path): os.mkdir(temp_path) fp = open(os.path.join(temp_path, temp_fname), "wb") for chunk in file.chunks(): fp.write(chunk) fp.close() retdat = {"result": 0, "msg": "File successfully Uploaded"} if retdat["result"] == 0: try: mapElement = Proguardmap.objects.get(pid=projectElement, appversion=appver) if mapElement.filename != temp_fname: temp_path = os.path.join(PROJECT_DIR, get_config("proguard_map_path")) temp_path = os.path.join(temp_path, apikey) temp_path = os.path.join(temp_path, appver) os.remove(os.path.join(temp_path, mapElement.filename)) mapElement.filename = temp_fname mapElement.uploadtime = getUTCawaredatetime() mapElement.save() retdat = {"result": 1, "msg": "File successfully re Uploaded"} print "mapping file overwrite" except ObjectDoesNotExist: print "new mapping file" mapElement = Proguardmap( pid=projectElement, appversion=appver, filename=temp_fname, uploadtime=getUTCawaredatetime() ) mapElement.save() retdat["appversion"] = mapElement.appversion retdat["filename"] = mapElement.filename retdat["date"] = toTimezone(mapElement.uploadtime, projectElement.timezone).__format__("%Y.%m.%d") retdat["time"] = toTimezone(mapElement.uploadtime, projectElement.timezone).__format__("%H:%M") print retdat return HttpResponse(json.dumps(retdat), "application/json")
def proguardmap_upload(request, apikey): print 'proguardmap_upload',apikey result, msg, userElement, projectElement = validUserPjt(request.user, apikey) if not result: return HttpResponse(msg) print request.FILES appver = request.POST['appversion'] retdat = {'result':-1,'msg':'Failed to Upload File'} if request.method != 'POST': retdat = {'result':-1,'msg':'Bad request'} elif len(appver) == 0: retdat = {'result':-1,'msg':'Invalid App version'} elif not 'file' in request.FILES: retdat = {'result':-1,'msg':'You should select file'} else: file = request.FILES['file'] temp_fname = file._name temp_path = os.path.join(PROJECT_DIR,get_config('proguard_map_path')) if not os.path.isdir(temp_path): os.mkdir(temp_path) temp_path = os.path.join(temp_path,apikey) if not os.path.isdir(temp_path): os.mkdir(temp_path) temp_path = os.path.join(temp_path,appver) if not os.path.isdir(temp_path): os.mkdir(temp_path) fp = open(os.path.join(temp_path,temp_fname) , 'wb') for chunk in file.chunks(): fp.write(chunk) fp.close() retdat = {'result':0,'msg':'File successfully Uploaded'} if retdat['result'] == 0: try: mapElement = Proguardmap.objects.get(pid=projectElement,appversion=appver) if mapElement.filename != temp_fname: temp_path = os.path.join(PROJECT_DIR,get_config('proguard_map_path')) temp_path = os.path.join(temp_path,apikey) temp_path = os.path.join(temp_path,appver) os.remove(os.path.join(temp_path,mapElement.filename)) mapElement.filename = temp_fname mapElement.uploadtime = getUTCawaredatetime() mapElement.save() retdat = {'result':1,'msg':'File successfully re Uploaded'} print 'mapping file overwrite' except ObjectDoesNotExist: print 'new mapping file' mapElement = Proguardmap( pid=projectElement, appversion=appver, filename=temp_fname, uploadtime=getUTCawaredatetime(), ) mapElement.save(); retdat['appversion'] = mapElement.appversion retdat['filename'] = mapElement.filename retdat['date'] = toTimezone(mapElement.uploadtime,projectElement.timezone).__format__('%Y.%m.%d') retdat['time'] = toTimezone(mapElement.uploadtime,projectElement.timezone).__format__('%H:%M') print retdat return HttpResponse(json.dumps(retdat), 'application/json');
def proguardmap_upload(request, apikey): #Proguard MAP데이터를 업로드한다. print 'proguardmap_upload', apikey result, msg, userElement, projectElement = validUserPjt( request.user, apikey) if not result: return HttpResponse(msg) print request.FILES appver = request.POST['appversion'] retdat = {'result': -1, 'msg': 'Failed to Upload File'} if request.method != 'POST': retdat = {'result': -1, 'msg': 'Bad request'} elif len(appver) == 0: retdat = {'result': -1, 'msg': 'Invalid App version'} elif not 'file' in request.FILES: retdat = {'result': -1, 'msg': 'You should select file'} else: file = request.FILES['file'] temp_fname = file._name temp_path = os.path.join(PROJECT_DIR, get_config('proguard_map_path')) if not os.path.isdir(temp_path): os.mkdir(temp_path) temp_path = os.path.join(temp_path, apikey) if not os.path.isdir(temp_path): os.mkdir(temp_path) temp_path = os.path.join(temp_path, appver) if not os.path.isdir(temp_path): os.mkdir(temp_path) fp = open(os.path.join(temp_path, temp_fname), 'wb') for chunk in file.chunks(): fp.write(chunk) fp.close() retdat = {'result': 0, 'msg': 'File successfully Uploaded'} #정상적으로 Map파일이 업로드 되었다면 if retdat['result'] == 0: try: mapElement = Proguardmap.objects.get(pid=projectElement, appversion=appver) if mapElement.filename != temp_fname: temp_path = os.path.join(PROJECT_DIR, get_config('proguard_map_path')) temp_path = os.path.join(temp_path, apikey) temp_path = os.path.join(temp_path, appver) os.remove(os.path.join(temp_path, mapElement.filename)) mapElement.filename = temp_fname mapElement.uploadtime = getUTCawaredatetime() mapElement.save() retdat = {'result': 1, 'msg': 'File successfully re Uploaded'} print 'mapping file overwrite' except ObjectDoesNotExist: print 'new mapping file' mapElement = Proguardmap( pid=projectElement, appversion=appver, filename=temp_fname, uploadtime=getUTCawaredatetime(), ) mapElement.save() retdat['appversion'] = mapElement.appversion retdat['filename'] = mapElement.filename retdat['date'] = toTimezone( mapElement.uploadtime, projectElement.timezone).__format__('%Y.%m.%d') retdat['time'] = toTimezone( mapElement.uploadtime, projectElement.timezone).__format__('%H:%M') print retdat return HttpResponse(json.dumps(retdat), 'application/json')