chore: accept connection test lookback seconds as request param (#4650)

Also removes connectionStatus from integration details.
This commit is contained in:
Raj Kamal Singh 2024-03-06 11:06:04 +05:30 committed by GitHub
parent 0c14145ef9
commit 7136ecc2fe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 15 additions and 26 deletions

View File

@ -2456,16 +2456,6 @@ func (ah *APIHandler) GetIntegration(
return 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) ah.Respond(w, integration)
} }
@ -2481,8 +2471,14 @@ func (ah *APIHandler) GetIntegrationConnectionStatus(
return 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( connectionStatus, apiErr := ah.calculateConnectionStatus(
r.Context(), connectionTests, r.Context(), connectionTests, lookbackSeconds,
) )
if apiErr != nil { if apiErr != nil {
RespondError(w, apiErr, "Failed to calculate integration connection status") RespondError(w, apiErr, "Failed to calculate integration connection status")
@ -2495,13 +2491,13 @@ func (ah *APIHandler) GetIntegrationConnectionStatus(
func (ah *APIHandler) calculateConnectionStatus( func (ah *APIHandler) calculateConnectionStatus(
ctx context.Context, ctx context.Context,
connectionTests *integrations.IntegrationConnectionTests, connectionTests *integrations.IntegrationConnectionTests,
lookbackSeconds int64,
) (*integrations.IntegrationConnectionStatus, *model.ApiError) { ) (*integrations.IntegrationConnectionStatus, *model.ApiError) {
result := &integrations.IntegrationConnectionStatus{} result := &integrations.IntegrationConnectionStatus{}
if connectionTests.Logs != nil { if connectionTests.Logs != nil {
qrParams := &v3.QueryRangeParamsV3{ qrParams := &v3.QueryRangeParamsV3{
// Look back up to 7 days for integration logs Start: time.Now().UnixMilli() - (lookbackSeconds * 1000),
Start: time.Now().UnixMilli() - (7 * 86400000),
End: time.Now().UnixMilli(), End: time.Now().UnixMilli(),
CompositeQuery: &v3.CompositeQuery{ CompositeQuery: &v3.CompositeQuery{
PanelType: v3.PanelTypeList, PanelType: v3.PanelTypeList,

View File

@ -89,8 +89,6 @@ type IntegrationDetails struct {
Assets IntegrationAssets `json:"assets"` Assets IntegrationAssets `json:"assets"`
ConnectionTests *IntegrationConnectionTests `json:"connection_tests"` ConnectionTests *IntegrationConnectionTests `json:"connection_tests"`
// ConnectionStatus gets derived using `ConnectionTests`
ConnectionStatus *IntegrationConnectionStatus `json:"connection_status"`
} }
type IntegrationsListItem struct { type IntegrationsListItem struct {

View File

@ -44,12 +44,9 @@ func TestSignozIntegrationLifeCycle(t *testing.T) {
availableIntegrations[0].Id, map[string]interface{}{}, availableIntegrations[0].Id, map[string]interface{}{},
) )
testbed.mockLogQueryResponse([]model.SignozLog{})
ii := testbed.GetIntegrationDetailsFromQS(availableIntegrations[0].Id) ii := testbed.GetIntegrationDetailsFromQS(availableIntegrations[0].Id)
require.Equal(ii.Id, availableIntegrations[0].Id) require.Equal(ii.Id, availableIntegrations[0].Id)
require.NotNil(ii.Installation) require.NotNil(ii.Installation)
require.NotNil(ii.ConnectionStatus)
require.Nil(ii.ConnectionStatus.Logs)
installedResp = testbed.GetInstalledIntegrationsFromQS() installedResp = testbed.GetInstalledIntegrationsFromQS()
installedIntegrations := installedResp.Integrations installedIntegrations := installedResp.Integrations
@ -61,28 +58,26 @@ func TestSignozIntegrationLifeCycle(t *testing.T) {
require.Greater(len(availableIntegrations), 0) require.Greater(len(availableIntegrations), 0)
// Integration connection status should get updated after signal data has been received. // 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{}{ testLog := makeTestSignozLog("test log body", map[string]interface{}{
"source": "nginx", "source": "nginx",
}) })
testbed.mockLogQueryResponse([]model.SignozLog{testLog}) testbed.mockLogQueryResponse([]model.SignozLog{testLog})
connectionStatus := testbed.GetIntegrationConnectionStatus(ii.Id) connectionStatus = testbed.GetIntegrationConnectionStatus(ii.Id)
require.NotNil(connectionStatus) require.NotNil(connectionStatus)
require.NotNil(connectionStatus.Logs) require.NotNil(connectionStatus.Logs)
require.Equal(connectionStatus.Logs.LastReceivedTsMillis, int64(testLog.Timestamp/1000000)) 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 // Should be able to uninstall integration
require.True(availableIntegrations[0].IsInstalled) require.True(availableIntegrations[0].IsInstalled)
testbed.RequestQSToUninstallIntegration( testbed.RequestQSToUninstallIntegration(
availableIntegrations[0].Id, availableIntegrations[0].Id,
) )
testbed.mockLogQueryResponse([]model.SignozLog{})
ii = testbed.GetIntegrationDetailsFromQS(availableIntegrations[0].Id) ii = testbed.GetIntegrationDetailsFromQS(availableIntegrations[0].Id)
require.Equal(ii.Id, availableIntegrations[0].Id) require.Equal(ii.Id, availableIntegrations[0].Id)
require.Nil(ii.Installation) require.Nil(ii.Installation)