[ARVADOS] updated: 2.1.0-823-g0e26c53b1
Git user
git at public.arvados.org
Mon Jun 7 18:01:23 UTC 2021
Summary of changes:
lib/costanalyzer/costanalyzer.go | 47 ++++++++++++++++++++--------------------
1 file changed, 24 insertions(+), 23 deletions(-)
via 0e26c53b179763f279a9f6014fec0ac96c6dbeab (commit)
from 05607eae460bab7efc61dd33d1e88b31139a97c7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 0e26c53b179763f279a9f6014fec0ac96c6dbeab
Author: Ward Vandewege <ward at curii.com>
Date: Mon Jun 7 14:01:10 2021 -0400
17717: address review comments.
Arvados-DCO-1.1-Signed-off-by: Ward Vandewege <ward at curii.com>
diff --git a/lib/costanalyzer/costanalyzer.go b/lib/costanalyzer/costanalyzer.go
index b828c5ce0..6087c88e4 100644
--- a/lib/costanalyzer/costanalyzer.go
+++ b/lib/costanalyzer/costanalyzer.go
@@ -24,6 +24,8 @@ import (
"github.com/sirupsen/logrus"
)
+const timestampFormat = "2006-01-02T15:04:05"
+
type nodeInfo struct {
// Legacy (records created by Arvados Node Manager with Arvados <= 1.4.3)
Properties struct {
@@ -58,10 +60,10 @@ func parseFlags(prog string, args []string, loader *config.Loader, logger *logru
flags.Usage = func() {
fmt.Fprintf(flags.Output(), `
Usage:
- %s [options ...] [uuid ...]
+ %s [options ...] [UUID ...]
This program analyzes the cost of Arvados container requests and calculates
- the total cost across all requests. At least one uuid or a timestamp range
+ the total cost across all requests. At least one UUID or a timestamp range
must be specified.
When the '-output' option is specified, a set of CSV files with cost details
@@ -69,22 +71,20 @@ Usage:
all the containers used to fulfill the container request, together with the
machine type and cost of each container.
- When supplied with the uuid of a container request, it will calculate the
+ When supplied with the UUID of a container request, it will calculate the
cost of that container request and all its children.
- When supplied with the uuid of a collection, it will see if there is a
- container_request uuid in the properties of the collection, and if so, it
+ When supplied with the UUID of a collection, it will see if there is a
+ container_request UUID in the properties of the collection, and if so, it
will calculate the cost of that container request and all its children.
- When supplied with a project uuid or when supplied with multiple container
- request or collection uuids, it will calculate the total cost for all
- supplied uuid.
+ When supplied with a project UUID or when supplied with multiple container
+ request or collection UUIDs, it will calculate the total cost for all
+ supplied UUIDs.
When supplied with a 'begin' and 'end' timestamp (format:
- 2006-01-02T15:04:05), it will calculate the cost for the UUIDs of all the
- container requests with an associated container whose "Finished at" timestamp
- is greater than or equal to the "begin" timestamp and smaller than the "end"
- timestamp.
+ %s), it will calculate the cost for all top-level container
+ requests whose containers finished during the specified interval.
The total cost calculation takes container reuse into account: if a container
was reused between several container requests, its cost will only be counted
@@ -109,22 +109,22 @@ Usage:
permanent cloud nodes that provide the Arvados services, the cost of data
stored in Arvados, etc.
- - When provided with a project uuid, subprojects will not be considered.
+ - When provided with a project UUID, subprojects will not be considered.
- In order to get the data for the uuids supplied, the ARVADOS_API_HOST and
+ In order to get the data for the UUIDs supplied, the ARVADOS_API_HOST and
ARVADOS_API_TOKEN environment variables must be set.
This program prints the total dollar amount from the aggregate cost
- accounting across all provided uuids on stdout.
+ accounting across all provided UUIDs on stdout.
Options:
-`, prog)
+`, prog, timestampFormat)
flags.PrintDefaults()
}
loglevel := flags.String("log-level", "info", "logging `level` (debug, info, ...)")
flags.StringVar(&resultsDir, "output", "", "output `directory` for the CSV reports")
- flags.StringVar(&beginStr, "begin", "", "timestamp `begin` for date range operation (format: 2006-01-02T15:04:05)")
- flags.StringVar(&endStr, "end", "", "timestamp `end` for date range operation (format: 2006-01-02T15:04:05)")
+ flags.StringVar(&beginStr, "begin", "", fmt.Sprintf("timestamp `begin` for date range operation (format: %s)", timestampFormat))
+ flags.StringVar(&endStr, "end", "", fmt.Sprintf("timestamp `end` for date range operation (format: %s)", timestampFormat))
flags.BoolVar(&cache, "cache", true, "create and use a local disk cache of Arvados objects")
err = flags.Parse(args)
if err == flag.ErrHelp {
@@ -146,11 +146,11 @@ Options:
if len(beginStr) != 0 {
var errB, errE error
- begin, errB = time.Parse("2006-01-02T15:04:05", beginStr)
- end, errE = time.Parse("2006-01-02T15:04:05", endStr)
+ begin, errB = time.Parse(timestampFormat, beginStr)
+ end, errE = time.Parse(timestampFormat, endStr)
if (errB != nil) || (errE != nil) {
flags.Usage()
- err = fmt.Errorf("When specifying a date range, both begin and end must be of the format 2006-01-02T15:04:05 %+v, %+v", errB, errE)
+ err = fmt.Errorf("When specifying a date range, both begin and end must be of the format %s %+v, %+v", timestampFormat, errB, errE)
exitCode = 2
return
}
@@ -473,7 +473,7 @@ func generateCrCsv(logger *logrus.Logger, uuid string, arv *arvadosclient.Arvado
if err != nil {
return nil, fmt.Errorf("error querying container_requests: %s", err.Error())
}
- logger.Infof("Collecting child containers for container request %s", crUUID)
+ logger.Infof("Collecting child containers for container request %s (%s)", crUUID, container.FinishedAt)
for _, cr2 := range childCrs.Items {
logger.Info(".")
node, err := getNode(arv, ac, kc, cr2)
@@ -542,6 +542,7 @@ func costanalyzer(prog string, args []string, loader *config.Loader, logger *log
// Populate uuidChannel with the requested uuid list
go func() {
+ defer close(uuidChannel)
for _, uuid := range uuids {
uuidChannel <- uuid
}
@@ -549,6 +550,7 @@ func costanalyzer(prog string, args []string, loader *config.Loader, logger *log
if !begin.IsZero() {
initialParams := arvados.ResourceListParams{
Filters: []arvados.Filter{{"container.finished_at", ">=", begin}, {"container.finished_at", "<", end}, {"requesting_container_uuid", "=", nil}},
+ Order: "created_at",
}
params := initialParams
for {
@@ -574,7 +576,6 @@ func costanalyzer(prog string, args []string, loader *config.Loader, logger *log
}
}
- close(uuidChannel)
}()
cost := make(map[string]float64)
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list