-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
68 lines (62 loc) · 1.99 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
_ "embed"
"flag"
"fmt"
"github.com/drkennetz/azcost/azure"
"github.com/drkennetz/azcost/utils"
"log"
"os"
)
var (
printVersion = flag.Bool("version", false, "print version and exit")
subscription = flag.String("subscriptionid", "", "subscription id, format: 00000000-0000-0000-0000-000000000000")
start = flag.String("start", "", "start date of range to measure cost")
end = flag.String("end", "", "end date of range to measure cost")
r1 = flag.Bool("r1", false, "aggregate by resourceId")
r2 = flag.Bool("r2", false, "aggregate by resourceType")
fn = flag.String("f", "", "filename of results - if not included will be <start>.<end>.csv")
)
//go:embed VERSION
var version string
func main() {
flag.Parse()
if *printVersion {
fmt.Println(version)
os.Exit(0)
}
if *subscription == "" {
log.Fatalln("Please include a valid azure subscription id of the form: 00000000-0000-0000-0000-000000000000 ")
}
if *start == "" {
log.Fatalln("Please include start date with format YYYY-MM-DD")
}
if *end == "" {
log.Fatalln("Please include end date with format YYYY-MM-DD")
}
if *fn == "" {
*fn = fmt.Sprintf("%s.%s.csv", *start, *end)
}
if *r1 {
grouping := azure.NewResourceIdTypeGroupGrouping("Dimension")
results := azure.Run(*start, *end, *subscription, grouping)
parsedResults := results.ParseIdResults()
for _, v := range parsedResults.Results {
fmt.Println(v.Date, v.Cost, v.ParsedResourceGroup, v.ParsedResourceType, v.ParsedResourceId)
}
}
if *r2 {
grouping := azure.NewResourceTypeGroupGrouping("Dimension")
results := azure.Run2(*start, *end, *subscription, grouping)
var totalCostResource float64
for _, v := range results.Resources {
totalCostResource += v.Cost
}
parsedResults := results.ParseNoIdResults()
gb := parsedResults.GroupByRg()
gb.PrettyPrint()
fmt.Println("Total cost of resources for time period", *start, *end, ":", totalCostResource)
utils.WriteCSV(*fn, gb)
}
os.Exit(0)
}