@@ -700,8 +700,12 @@ func (a App) GetIssueFreeMetrics(
700
700
) {
701
701
crashFree = & metrics.CrashFreeSession {}
702
702
perceivedCrashFree = & metrics.PerceivedCrashFreeSession {}
703
- anrFree = & metrics.ANRFreeSession {}
704
- perceivedANRFree = & metrics.PerceivedANRFreeSession {}
703
+
704
+ switch a .Platform {
705
+ case platform .Android :
706
+ anrFree = & metrics.ANRFreeSession {}
707
+ perceivedANRFree = & metrics.PerceivedANRFreeSession {}
708
+ }
705
709
706
710
selectedVersions , err := af .VersionPairs ()
707
711
if err != nil {
@@ -713,12 +717,19 @@ func (a App) GetIssueFreeMetrics(
713
717
Select ("uniqMergeIf(unique_sessions, app_version not in (?)) as unselected_sessions" , selectedVersions .Parameterize ()).
714
718
Select ("uniqMergeIf(crash_sessions, app_version in (?)) as selected_crash_sessions" , selectedVersions .Parameterize ()).
715
719
Select ("uniqMergeIf(crash_sessions, app_version not in (?)) as unselected_crash_sessions" , selectedVersions .Parameterize ()).
716
- Select ("uniqMergeIf(anr_sessions, app_version in (?)) as selected_anr_sessions" , selectedVersions .Parameterize ()).
717
- Select ("uniqMergeIf(anr_sessions, app_version not in (?)) as unselected_anr_sessions" , selectedVersions .Parameterize ()).
718
720
Select ("uniqMergeIf(perceived_crash_sessions, app_version in (?)) as selected_perceived_crash_sessions" , selectedVersions .Parameterize ()).
719
- Select ("uniqMergeIf(perceived_crash_sessions, app_version not in (?)) as unselected_perceived_crash_sessions" , selectedVersions .Parameterize ()).
720
- Select ("uniqMergeIf(perceived_anr_sessions, app_version in (?)) as selected_perceived_anr_sessions" , selectedVersions .Parameterize ()).
721
- Select ("uniqMergeIf(perceived_anr_sessions, app_version not in (?)) as unselected_perceived_anr_sessions" , selectedVersions .Parameterize ()).
721
+ Select ("uniqMergeIf(perceived_crash_sessions, app_version not in (?)) as unselected_perceived_crash_sessions" , selectedVersions .Parameterize ())
722
+
723
+ switch a .Platform {
724
+ case platform .Android :
725
+ stmt .
726
+ Select ("uniqMergeIf(anr_sessions, app_version in (?)) as selected_anr_sessions" , selectedVersions .Parameterize ()).
727
+ Select ("uniqMergeIf(anr_sessions, app_version not in (?)) as unselected_anr_sessions" , selectedVersions .Parameterize ()).
728
+ Select ("uniqMergeIf(perceived_anr_sessions, app_version in (?)) as selected_perceived_anr_sessions" , selectedVersions .Parameterize ()).
729
+ Select ("uniqMergeIf(perceived_anr_sessions, app_version not in (?)) as unselected_perceived_anr_sessions" , selectedVersions .Parameterize ())
730
+ }
731
+
732
+ stmt .
722
733
Where ("app_id = toUUID(?)" , af .AppID ).
723
734
Where ("timestamp >= ? and timestamp <= ?" , af .From , af .To )
724
735
@@ -727,52 +738,71 @@ func (a App) GetIssueFreeMetrics(
727
738
var (
728
739
selected , unselected uint64
729
740
crashSelected , crashUnselected uint64
730
- anrSelected , anrUnselected uint64
731
741
perceivedCrashSelected , perceivedCrashUnselected uint64
742
+ anrSelected , anrUnselected uint64
732
743
perceivedANRSelected , perceivedANRUnselected uint64
733
744
crashFreeUnselected float64
734
745
perceivedCrashFreeUnselected float64
735
746
anrFreeUnselected float64
736
747
perceivedANRFreeUnselected float64
737
748
)
738
749
739
- if err = server . Server . ChPool . QueryRow ( ctx , stmt . String (), stmt . Args () ... ). Scan (
750
+ dest := [] any {
740
751
& selected ,
741
752
& unselected ,
742
753
& crashSelected ,
743
754
& crashUnselected ,
744
- & anrSelected ,
745
- & anrUnselected ,
746
755
& perceivedCrashSelected ,
747
756
& perceivedCrashUnselected ,
748
- & perceivedANRSelected ,
749
- & perceivedANRUnselected ,
750
- ); err != nil {
757
+ }
758
+
759
+ switch a .Platform {
760
+ case platform .Android :
761
+ dest = append (dest , & anrSelected , & anrUnselected , & perceivedANRSelected , & perceivedANRUnselected )
762
+ }
763
+
764
+ if err = server .Server .ChPool .QueryRow (ctx , stmt .String (), stmt .Args ()... ).Scan (dest ... ); err != nil {
751
765
return
752
766
}
753
767
754
768
if selected == 0 {
755
769
crashFree .CrashFreeSessions = math .NaN ()
756
- anrFree .ANRFreeSessions = math .NaN ()
757
770
perceivedCrashFree .CrashFreeSessions = math .NaN ()
758
- perceivedANRFree .ANRFreeSessions = math .NaN ()
771
+
772
+ switch a .Platform {
773
+ case platform .Android :
774
+ anrFree .ANRFreeSessions = math .NaN ()
775
+ perceivedANRFree .ANRFreeSessions = math .NaN ()
776
+ }
759
777
} else {
760
778
crashFree .CrashFreeSessions = math .Round (1 - float64 (crashSelected / selected )) * 100
761
- anrFree .ANRFreeSessions = math .Round (1 - float64 (anrSelected / selected )) * 100
762
779
perceivedCrashFree .CrashFreeSessions = math .Round (1 - float64 (perceivedCrashSelected / selected )) * 100
763
- perceivedANRFree .ANRFreeSessions = math .Round (1 - float64 (perceivedANRSelected / selected )) * 100
780
+
781
+ switch a .Platform {
782
+ case platform .Android :
783
+ anrFree .ANRFreeSessions = math .Round (1 - float64 (anrSelected / selected )) * 100
784
+ perceivedANRFree .ANRFreeSessions = math .Round (1 - float64 (perceivedANRSelected / selected )) * 100
785
+ }
764
786
}
765
787
766
788
if unselected == 0 {
767
789
crashFreeUnselected = math .NaN ()
768
790
perceivedCrashFreeUnselected = math .NaN ()
769
- anrFreeUnselected = math .NaN ()
770
- perceivedANRFreeUnselected = math .NaN ()
791
+
792
+ switch a .Platform {
793
+ case platform .Android :
794
+ anrFreeUnselected = math .NaN ()
795
+ perceivedANRFreeUnselected = math .NaN ()
796
+ }
771
797
} else {
772
798
crashFreeUnselected = math .Round (1 - float64 (crashUnselected / unselected )) * 100
773
799
perceivedCrashFreeUnselected = math .Round (1 - float64 (perceivedCrashUnselected / unselected )) * 100
774
- anrFreeUnselected = math .Round (1 - float64 (anrUnselected / unselected )) * 100
775
- perceivedANRFreeUnselected = math .Round (1 - float64 (perceivedANRUnselected / unselected )) * 100
800
+
801
+ switch a .Platform {
802
+ case platform .Android :
803
+ anrFreeUnselected = math .Round (1 - float64 (anrUnselected / unselected )) * 100
804
+ perceivedANRFreeUnselected = math .Round (1 - float64 (perceivedANRUnselected / unselected )) * 100
805
+ }
776
806
}
777
807
778
808
// compute delta
@@ -791,18 +821,21 @@ func (a App) GetIssueFreeMetrics(
791
821
perceivedCrashFree .Delta = 1
792
822
}
793
823
794
- if anrFreeUnselected != 0 {
795
- anrFree .Delta = math .Round (anrFree .ANRFreeSessions / anrFreeUnselected * 100 ) / 100
796
- } else {
797
- anrFree .Delta = 1
798
- }
799
-
800
- if perceivedANRFreeUnselected != 0 {
801
- perceivedANRFree .Delta = math .Round (perceivedANRFree .ANRFreeSessions / perceivedANRFreeUnselected * 100 ) / 100
824
+ switch a .Platform {
825
+ case platform .Android :
826
+ if anrFreeUnselected != 0 {
827
+ anrFree .Delta = math .Round (anrFree .ANRFreeSessions / anrFreeUnselected * 100 ) / 100
828
+ } else {
829
+ anrFree .Delta = 1
830
+ }
802
831
803
- } else {
804
- perceivedANRFree .Delta = 1
832
+ if perceivedANRFreeUnselected != 0 {
833
+ perceivedANRFree .Delta = math .Round (perceivedANRFree .ANRFreeSessions / perceivedANRFreeUnselected * 100 ) / 100
834
+ } else {
835
+ perceivedANRFree .Delta = 1
836
+ }
805
837
}
838
+
806
839
} else {
807
840
// because if there are no unselected
808
841
// app versions, then:
@@ -816,19 +849,26 @@ func (a App) GetIssueFreeMetrics(
816
849
perceivedCrashFree .Delta = 1
817
850
}
818
851
819
- if anrFree .ANRFreeSessions != 0 {
820
- anrFree .Delta = 1
821
- }
852
+ switch a .Platform {
853
+ case platform .Android :
854
+ if anrFree .ANRFreeSessions != 0 {
855
+ anrFree .Delta = 1
856
+ }
822
857
823
- if perceivedANRFree .ANRFreeSessions != 0 {
824
- perceivedANRFree .Delta = 1
858
+ if perceivedANRFree .ANRFreeSessions != 0 {
859
+ perceivedANRFree .Delta = 1
860
+ }
825
861
}
826
862
}
827
863
828
864
crashFree .SetNaNs ()
829
865
perceivedCrashFree .SetNaNs ()
830
- anrFree .SetNaNs ()
831
- perceivedANRFree .SetNaNs ()
866
+
867
+ switch a .Platform {
868
+ case platform .Android :
869
+ anrFree .SetNaNs ()
870
+ perceivedANRFree .SetNaNs ()
871
+ }
832
872
833
873
return
834
874
}
@@ -2402,17 +2442,25 @@ func GetAppMetrics(c *gin.Context) {
2402
2442
ID : & id ,
2403
2443
}
2404
2444
2405
- team , err := app .getTeam (ctx )
2406
- if err != nil {
2407
- msg := "failed to get team from app id"
2445
+ if err := app .Populate (ctx ); err != nil {
2446
+ msg := `failed to fetch app details`
2408
2447
fmt .Println (msg , err )
2409
- c .JSON (http .StatusInternalServerError , gin.H {"error" : msg })
2448
+ status := http .StatusInternalServerError
2449
+
2450
+ if errors .Is (err , pgx .ErrNoRows ) {
2451
+ status = http .StatusNotFound
2452
+ msg = fmt .Sprintf (`app with id %q does not exist` , app .ID )
2453
+ }
2454
+
2455
+ c .JSON (status , gin.H {
2456
+ "error" : msg ,
2457
+ })
2458
+
2410
2459
return
2411
2460
}
2412
- if team == nil {
2413
- msg := fmt .Sprintf ("no team exists for app [%s]" , app .ID )
2414
- c .JSON (http .StatusBadRequest , gin.H {"error" : msg })
2415
- return
2461
+
2462
+ team := & Team {
2463
+ ID : & app .TeamId ,
2416
2464
}
2417
2465
2418
2466
userId := c .GetString ("userId" )
0 commit comments