From 7136ecc2fec9548284b7c6fa805bbf8c16e4d693 Mon Sep 17 00:00:00 2001 From: Raj Kamal Singh <1133322+raj-k-singh@users.noreply.github.com> Date: Wed, 6 Mar 2024 11:06:04 +0530 Subject: [PATCH] chore: accept connection test lookback seconds as request param (#4650) Also removes connectionStatus from integration details. --- pkg/query-service/app/http_handler.go | 22 ++++++++----------- pkg/query-service/app/integrations/manager.go | 2 -- .../integration/signoz_integrations_test.go | 17 +++++--------- 3 files changed, 15 insertions(+), 26 deletions(-) diff --git a/pkg/query-service/app/http_handler.go b/pkg/query-service/app/http_handler.go index 6f3ef25b3f..07bce1a4c2 100644 --- a/pkg/query-service/app/http_handler.go +++ b/pkg/query-service/app/http_handler.go @@ -2456,16 +2456,6 @@ func (ah *APIHandler) GetIntegration( return } - // Add connection status details. - connectionStatus, apiErr := ah.calculateConnectionStatus( - r.Context(), integration.ConnectionTests, - ) - if apiErr != nil { - RespondError(w, apiErr, "Failed to calculate integration connection status") - return - } - integration.ConnectionStatus = connectionStatus - ah.Respond(w, integration) } @@ -2481,8 +2471,14 @@ func (ah *APIHandler) GetIntegrationConnectionStatus( return } + lookbackSecondsStr := r.URL.Query().Get("lookback_seconds") + lookbackSeconds, err := strconv.ParseInt(lookbackSecondsStr, 10, 64) + if err != nil { + lookbackSeconds = 15 * 60 + } + connectionStatus, apiErr := ah.calculateConnectionStatus( - r.Context(), connectionTests, + r.Context(), connectionTests, lookbackSeconds, ) if apiErr != nil { RespondError(w, apiErr, "Failed to calculate integration connection status") @@ -2495,13 +2491,13 @@ func (ah *APIHandler) GetIntegrationConnectionStatus( func (ah *APIHandler) calculateConnectionStatus( ctx context.Context, connectionTests *integrations.IntegrationConnectionTests, + lookbackSeconds int64, ) (*integrations.IntegrationConnectionStatus, *model.ApiError) { result := &integrations.IntegrationConnectionStatus{} if connectionTests.Logs != nil { qrParams := &v3.QueryRangeParamsV3{ - // Look back up to 7 days for integration logs - Start: time.Now().UnixMilli() - (7 * 86400000), + Start: time.Now().UnixMilli() - (lookbackSeconds * 1000), End: time.Now().UnixMilli(), CompositeQuery: &v3.CompositeQuery{ PanelType: v3.PanelTypeList, diff --git a/pkg/query-service/app/integrations/manager.go b/pkg/query-service/app/integrations/manager.go index deaf804dab..fa1c4b3ce6 100644 --- a/pkg/query-service/app/integrations/manager.go +++ b/pkg/query-service/app/integrations/manager.go @@ -89,8 +89,6 @@ type IntegrationDetails struct { Assets IntegrationAssets `json:"assets"` ConnectionTests *IntegrationConnectionTests `json:"connection_tests"` - // ConnectionStatus gets derived using `ConnectionTests` - ConnectionStatus *IntegrationConnectionStatus `json:"connection_status"` } type IntegrationsListItem struct { diff --git a/pkg/query-service/tests/integration/signoz_integrations_test.go b/pkg/query-service/tests/integration/signoz_integrations_test.go index bb5c21fe30..59fa256f7f 100644 --- a/pkg/query-service/tests/integration/signoz_integrations_test.go +++ b/pkg/query-service/tests/integration/signoz_integrations_test.go @@ -44,12 +44,9 @@ func TestSignozIntegrationLifeCycle(t *testing.T) { availableIntegrations[0].Id, map[string]interface{}{}, ) - testbed.mockLogQueryResponse([]model.SignozLog{}) ii := testbed.GetIntegrationDetailsFromQS(availableIntegrations[0].Id) require.Equal(ii.Id, availableIntegrations[0].Id) require.NotNil(ii.Installation) - require.NotNil(ii.ConnectionStatus) - require.Nil(ii.ConnectionStatus.Logs) installedResp = testbed.GetInstalledIntegrationsFromQS() installedIntegrations := installedResp.Integrations @@ -61,28 +58,26 @@ func TestSignozIntegrationLifeCycle(t *testing.T) { require.Greater(len(availableIntegrations), 0) // Integration connection status should get updated after signal data has been received. + testbed.mockLogQueryResponse([]model.SignozLog{}) + connectionStatus := testbed.GetIntegrationConnectionStatus(ii.Id) + require.NotNil(connectionStatus) + require.Nil(connectionStatus.Logs) + testLog := makeTestSignozLog("test log body", map[string]interface{}{ "source": "nginx", }) testbed.mockLogQueryResponse([]model.SignozLog{testLog}) - connectionStatus := testbed.GetIntegrationConnectionStatus(ii.Id) + connectionStatus = testbed.GetIntegrationConnectionStatus(ii.Id) require.NotNil(connectionStatus) require.NotNil(connectionStatus.Logs) require.Equal(connectionStatus.Logs.LastReceivedTsMillis, int64(testLog.Timestamp/1000000)) - testbed.mockLogQueryResponse([]model.SignozLog{testLog}) - ii = testbed.GetIntegrationDetailsFromQS(ii.Id) - require.NotNil(ii.ConnectionStatus) - require.NotNil(ii.ConnectionStatus.Logs) - require.Equal(connectionStatus.Logs.LastReceivedTsMillis, int64(testLog.Timestamp/1000000)) - // Should be able to uninstall integration require.True(availableIntegrations[0].IsInstalled) testbed.RequestQSToUninstallIntegration( availableIntegrations[0].Id, ) - testbed.mockLogQueryResponse([]model.SignozLog{}) ii = testbed.GetIntegrationDetailsFromQS(availableIntegrations[0].Id) require.Equal(ii.Id, availableIntegrations[0].Id) require.Nil(ii.Installation)