This commit is contained in:
@@ -68,6 +68,22 @@ func (h *Handler) DailyCreationDiagnostics(w http.ResponseWriter, r *http.Reques
|
||||
return
|
||||
}
|
||||
|
||||
var avgIsPresentLtOne int64
|
||||
avgPresenceQuery := fmt.Sprintf(`SELECT COUNT(*) FROM %s WHERE "AvgIsPresent" IS NOT NULL AND "AvgIsPresent" < 0.999999`, tableName)
|
||||
if err := dbConn.GetContext(ctx, &avgIsPresentLtOne, avgPresenceQuery); err != nil {
|
||||
h.Logger.Warn("daily creation diagnostics avg-is-present count failed", "table", tableName, "error", err)
|
||||
writeJSONError(w, http.StatusInternalServerError, "failed to read avg is present rows")
|
||||
return
|
||||
}
|
||||
|
||||
var missingPartialCount int64
|
||||
missingPartialQuery := fmt.Sprintf(`SELECT COUNT(*) FROM %s WHERE ("CreationTime" IS NULL OR "CreationTime" = 0) AND "AvgIsPresent" IS NOT NULL AND "AvgIsPresent" < 0.999999`, tableName)
|
||||
if err := dbConn.GetContext(ctx, &missingPartialCount, missingPartialQuery); err != nil {
|
||||
h.Logger.Warn("daily creation diagnostics missing partial count failed", "table", tableName, "error", err)
|
||||
writeJSONError(w, http.StatusInternalServerError, "failed to read missing partial rows")
|
||||
return
|
||||
}
|
||||
|
||||
missingPct := 0.0
|
||||
if totalRows > 0 {
|
||||
missingPct = float64(missingTotal) * 100 / float64(totalRows)
|
||||
@@ -133,6 +149,42 @@ LIMIT %d
|
||||
rows.Close()
|
||||
}
|
||||
|
||||
partialSamples := make([]models.DailyCreationMissingSample, 0, sampleLimit)
|
||||
partialSampleQuery := fmt.Sprintf(`
|
||||
SELECT "Vcenter","VmId","VmUuid","Name","SamplesPresent","AvgIsPresent","SnapshotTime"
|
||||
FROM %s
|
||||
WHERE ("CreationTime" IS NULL OR "CreationTime" = 0)
|
||||
AND "AvgIsPresent" IS NOT NULL
|
||||
AND "AvgIsPresent" < 0.999999
|
||||
ORDER BY "SamplesPresent" DESC
|
||||
LIMIT %d
|
||||
`, tableName, sampleLimit)
|
||||
if rows, err := dbConn.QueryxContext(ctx, partialSampleQuery); err != nil {
|
||||
h.Logger.Warn("daily creation diagnostics partial sample failed", "table", tableName, "error", err)
|
||||
} else {
|
||||
for rows.Next() {
|
||||
var (
|
||||
vcenter string
|
||||
vmId, vmUuid, name sql.NullString
|
||||
samplesPresent, snapshotTime sql.NullInt64
|
||||
avgIsPresent sql.NullFloat64
|
||||
)
|
||||
if err := rows.Scan(&vcenter, &vmId, &vmUuid, &name, &samplesPresent, &avgIsPresent, &snapshotTime); err != nil {
|
||||
continue
|
||||
}
|
||||
partialSamples = append(partialSamples, models.DailyCreationMissingSample{
|
||||
Vcenter: vcenter,
|
||||
VmId: vmId.String,
|
||||
VmUuid: vmUuid.String,
|
||||
Name: name.String,
|
||||
SamplesPresent: samplesPresent.Int64,
|
||||
AvgIsPresent: avgIsPresent.Float64,
|
||||
SnapshotTime: snapshotTime.Int64,
|
||||
})
|
||||
}
|
||||
rows.Close()
|
||||
}
|
||||
|
||||
response := models.DailyCreationDiagnosticsResponse{
|
||||
Status: "OK",
|
||||
Date: parsed.Format("2006-01-02"),
|
||||
@@ -140,8 +192,11 @@ LIMIT %d
|
||||
TotalRows: totalRows,
|
||||
MissingCreationCount: missingTotal,
|
||||
MissingCreationPct: missingPct,
|
||||
AvgIsPresentLtOneCount: avgIsPresentLtOne,
|
||||
MissingCreationPartialCount: missingPartialCount,
|
||||
MissingByVcenter: byVcenter,
|
||||
Samples: samples,
|
||||
MissingCreationPartialSamples: partialSamples,
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
Reference in New Issue
Block a user