예제 #1
0
파일: common.py 프로젝트: UrQA/URQA-Server
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
예제 #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
예제 #3
0
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')
예제 #4
0
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')
예제 #5
0
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')
예제 #6
0
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')
예제 #7
0
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')
예제 #8
0
파일: views.py 프로젝트: dookim/URQA-Server
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')
예제 #9
0
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')
예제 #10
0
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')
예제 #11
0
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')
예제 #12
0
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)
예제 #13
0
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)
예제 #14
0
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')
예제 #15
0
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")
예제 #16
0
파일: views.py 프로젝트: dookim/URQA-Server
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');
예제 #17
0
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')