@@ -881,59 +881,115 @@ func TestServer(t *testing.T) {
881
881
})
882
882
t .Run ("Prometheus" , func (t * testing.T ) {
883
883
t .Parallel ()
884
- random , err := net .Listen ("tcp" , "127.0.0.1:0" )
885
- require .NoError (t , err )
886
- _ = random .Close ()
887
- tcpAddr , valid := random .Addr ().(* net.TCPAddr )
888
- require .True (t , valid )
889
- randomPort := tcpAddr .Port
890
884
891
- inv , cfg := clitest .New (t ,
892
- "server" ,
893
- "--in-memory" ,
894
- "--http-address" , ":0" ,
895
- "--access-url" , "http://example.com" ,
896
- "--provisioner-daemons" , "1" ,
897
- "--prometheus-enable" ,
898
- "--prometheus-address" , ":" + strconv .Itoa (randomPort ),
899
- "--cache-dir" , t .TempDir (),
900
- )
885
+ randomPort := func (t * testing.T ) int {
886
+ random , err := net .Listen ("tcp" , "127.0.0.1:0" )
887
+ require .NoError (t , err )
888
+ _ = random .Close ()
889
+ tcpAddr , valid := random .Addr ().(* net.TCPAddr )
890
+ require .True (t , valid )
891
+ return tcpAddr .Port
892
+ }
901
893
902
- ctx , cancel := context . WithTimeout ( context . Background (), testutil . WaitShort )
903
- defer cancel ()
894
+ t . Run ( "DBMetricsDisabled" , func ( t * testing. T ) {
895
+ t . Parallel ()
904
896
905
- clitest . Start ( t , inv )
906
- _ = waitAccessURL ( t , cfg )
897
+ ctx , cancel := context . WithTimeout ( context . Background (), testutil . WaitShort )
898
+ defer cancel ( )
907
899
908
- var res * http.Response
909
- require .Eventually (t , func () bool {
910
- req , err := http .NewRequestWithContext (ctx , "GET" , fmt .Sprintf ("http://127.0.0.1:%d" , randomPort ), nil )
911
- assert .NoError (t , err )
912
- // nolint:bodyclose
913
- res , err = http .DefaultClient .Do (req )
914
- return err == nil
915
- }, testutil .WaitShort , testutil .IntervalFast )
916
- defer res .Body .Close ()
900
+ randPort := randomPort (t )
901
+ inv , cfg := clitest .New (t ,
902
+ "server" ,
903
+ "--in-memory" ,
904
+ "--http-address" , ":0" ,
905
+ "--access-url" , "http://example.com" ,
906
+ "--provisioner-daemons" , "1" ,
907
+ "--prometheus-enable" ,
908
+ "--prometheus-address" , ":" + strconv .Itoa (randPort ),
909
+ // "--prometheus-collect-db-metrics", // disabled by default
910
+ "--cache-dir" , t .TempDir (),
911
+ )
917
912
918
- scanner := bufio .NewScanner (res .Body )
919
- hasActiveUsers := false
920
- hasWorkspaces := false
921
- for scanner .Scan () {
922
- // This metric is manually registered to be tracked in the server. That's
923
- // why we test it's tracked here.
924
- if strings .HasPrefix (scanner .Text (), "coderd_api_active_users_duration_hour" ) {
925
- hasActiveUsers = true
926
- continue
913
+ clitest .Start (t , inv )
914
+ _ = waitAccessURL (t , cfg )
915
+
916
+ var res * http.Response
917
+ require .Eventually (t , func () bool {
918
+ req , err := http .NewRequestWithContext (ctx , "GET" , fmt .Sprintf ("http://127.0.0.1:%d" , randPort ), nil )
919
+ assert .NoError (t , err )
920
+ // nolint:bodyclose
921
+ res , err = http .DefaultClient .Do (req )
922
+ return err == nil
923
+ }, testutil .WaitShort , testutil .IntervalFast )
924
+ defer res .Body .Close ()
925
+
926
+ scanner := bufio .NewScanner (res .Body )
927
+ hasActiveUsers := false
928
+ hasWorkspaces := false
929
+ for scanner .Scan () {
930
+ // This metric is manually registered to be tracked in the server. That's
931
+ // why we test it's tracked here.
932
+ if strings .HasPrefix (scanner .Text (), "coderd_api_active_users_duration_hour" ) {
933
+ hasActiveUsers = true
934
+ continue
935
+ }
936
+ if strings .HasPrefix (scanner .Text (), "coderd_api_workspace_latest_build_total" ) {
937
+ hasWorkspaces = true
938
+ continue
939
+ }
940
+ if strings .HasPrefix (scanner .Text (), "coderd_db_query_latencies_seconds" ) {
941
+ t .Fatal ("db metrics should not be tracked when --prometheus-collect-db-metrics is not enabled" )
942
+ }
943
+ t .Logf ("scanned %s" , scanner .Text ())
927
944
}
928
- if strings .HasPrefix (scanner .Text (), "coderd_api_workspace_latest_build_total" ) {
929
- hasWorkspaces = true
930
- continue
945
+ require .NoError (t , scanner .Err ())
946
+ require .True (t , hasActiveUsers )
947
+ require .True (t , hasWorkspaces )
948
+ })
949
+
950
+ t .Run ("DBMetricsEnabled" , func (t * testing.T ) {
951
+ t .Parallel ()
952
+
953
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitShort )
954
+ defer cancel ()
955
+
956
+ randPort := randomPort (t )
957
+ inv , cfg := clitest .New (t ,
958
+ "server" ,
959
+ "--in-memory" ,
960
+ "--http-address" , ":0" ,
961
+ "--access-url" , "http://example.com" ,
962
+ "--provisioner-daemons" , "1" ,
963
+ "--prometheus-enable" ,
964
+ "--prometheus-address" , ":" + strconv .Itoa (randPort ),
965
+ "--prometheus-collect-db-metrics" ,
966
+ "--cache-dir" , t .TempDir (),
967
+ )
968
+
969
+ clitest .Start (t , inv )
970
+ _ = waitAccessURL (t , cfg )
971
+
972
+ var res * http.Response
973
+ require .Eventually (t , func () bool {
974
+ req , err := http .NewRequestWithContext (ctx , "GET" , fmt .Sprintf ("http://127.0.0.1:%d" , randPort ), nil )
975
+ assert .NoError (t , err )
976
+ // nolint:bodyclose
977
+ res , err = http .DefaultClient .Do (req )
978
+ return err == nil
979
+ }, testutil .WaitShort , testutil .IntervalFast )
980
+ defer res .Body .Close ()
981
+
982
+ scanner := bufio .NewScanner (res .Body )
983
+ hasDBMetrics := false
984
+ for scanner .Scan () {
985
+ if strings .HasPrefix (scanner .Text (), "coderd_db_query_latencies_seconds" ) {
986
+ hasDBMetrics = true
987
+ }
988
+ t .Logf ("scanned %s" , scanner .Text ())
931
989
}
932
- t .Logf ("scanned %s" , scanner .Text ())
933
- }
934
- require .NoError (t , scanner .Err ())
935
- require .True (t , hasActiveUsers )
936
- require .True (t , hasWorkspaces )
990
+ require .NoError (t , scanner .Err ())
991
+ require .True (t , hasDBMetrics )
992
+ })
937
993
})
938
994
t .Run ("GitHubOAuth" , func (t * testing.T ) {
939
995
t .Parallel ()
0 commit comments