Add measurement summary to list command

This commit is contained in:
Arturo Filastò 2018-09-11 15:40:42 +02:00
parent 31ccb1c181
commit 8da12a9c07
4 changed files with 57 additions and 10 deletions

View File

@ -27,9 +27,27 @@ func init() {
log.WithError(err).Error("failed to list measurements")
return err
}
msmtSummary := output.MeasurementSummaryData{
TotalCount: 0,
AnomalyCount: 0,
DataUsageUp: 0,
DataUsageDown: 0,
}
for _, msmt := range measurements {
// FIXME this logic should be adjusted for test groups that have many
// measurements in them
if msmtSummary.DataUsageUp == 0 {
msmtSummary.DataUsageUp = msmt.DataUsageUp
msmtSummary.DataUsageDown = msmt.DataUsageDown
}
if msmt.IsAnomaly.Bool == true {
msmtSummary.AnomalyCount++
}
msmtSummary.TotalCount++
output.MeasurementItem(msmt)
}
output.MeasurementSummary(msmtSummary)
} else {
doneResults, incompleteResults, err := database.ListResults(ctx.DB)
if err != nil {

View File

@ -19,8 +19,14 @@ func ListMeasurements(sess sqlbuilder.Database, resultID int64) ([]MeasurementUR
req := sess.Select(
"measurements.id as msmt_tbl_id",
"measurements.is_done as measurement_is_done",
"measurements.start_time as measurement_start_time",
"measurements.runtime as measurement_runtime",
"networks.id as network_id",
"results.id as result_id",
"results.start_time as result_start_time",
"results.is_done as result_is_done",
"results.runtime as result_runtime",
"urls.id as url_id",
db.Raw("networks.*"),
db.Raw("urls.*"),

View File

@ -21,13 +21,19 @@ type ResultNetwork struct {
// MeasurementURLNetwork is used for the JOIN between Measurement and URL
type MeasurementURLNetwork struct {
Measurement `db:",inline"`
MsmtTblID int64 `db:"msmt_tbl_id"`
Network `db:",inline"`
NetworkID int64 `db:"network_id"`
Result `db:",inline"`
ResultID int64 `db:"result_id"`
URL `db:",inline"`
Measurement `db:",inline"`
MeasurementStartTime time.Time `db:"measurement_start_time"`
MeasurementIsDone bool `db:"measurement_is_done"`
MeasurementRuntime float64 `db:"measurement_runtime"`
MsmtTblID int64 `db:"msmt_tbl_id"`
Network `db:",inline"`
NetworkID int64 `db:"network_id"`
Result `db:",inline"`
ResultID int64 `db:"result_id"`
ResultRuntime float64 `db:"result_runtime"`
ResultStartTime time.Time `db:"result_start_time"`
ResultIsDone bool `db:"result_is_done"`
URL `db:",inline"`
}
// Network represents a network tested by the user

View File

@ -20,6 +20,23 @@ func Progress(key string, perc float64, msg string) {
}).Info(msg)
}
type MeasurementSummaryData struct {
TotalCount int64
AnomalyCount int64
DataUsageUp int64
DataUsageDown int64
}
func MeasurementSummary(msmt MeasurementSummaryData) {
log.WithFields(log.Fields{
"type": "measurement_summary",
"total_count": msmt.TotalCount,
"anomaly_count": msmt.AnomalyCount,
"data_usage_down": msmt.DataUsageDown,
"data_usage_up": msmt.DataUsageUp,
}).Info("measurement summary")
}
// MeasurementItem logs a progress type event
func MeasurementItem(msmt database.MeasurementURLNetwork) {
log.WithFields(log.Fields{
@ -27,12 +44,12 @@ func MeasurementItem(msmt database.MeasurementURLNetwork) {
"id": msmt.MsmtTblID,
"test_name": msmt.TestName,
"test_group_name": msmt.Result.TestGroupName,
"start_time": msmt.Measurement.StartTime,
"start_time": msmt.MeasurementStartTime,
"test_keys": msmt.TestKeys,
"probe_cc": msmt.Network.CountryCode,
"network_name": msmt.Network.NetworkName,
"asn": msmt.Network.ASN,
"runtime": msmt.Measurement.Runtime,
"runtime": msmt.MeasurementRuntime,
"url": msmt.URL.URL.String,
"url_category_code": msmt.URL.CategoryCode.String,
"url_country_code": msmt.URL.CountryCode.String,
@ -42,7 +59,7 @@ func MeasurementItem(msmt database.MeasurementURLNetwork) {
"upload_failure_msg": msmt.UploadFailureMsg.String,
"is_failed": msmt.IsFailed,
"failure_msg": msmt.FailureMsg.String,
"is_done": msmt.Measurement.IsDone,
"is_done": msmt.MeasurementIsDone,
"report_file_path": msmt.ReportFilePath,
}).Info("measurement")
}