This commit is contained in:
37
.drone.sh
Normal file
37
.drone.sh
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# disable CGO for cross-compiling
|
||||||
|
export CGO_ENABLED=0
|
||||||
|
|
||||||
|
commit=$(git rev-parse HEAD)
|
||||||
|
buildtime=$(TZ=Australia/Sydney date +%Y-%m-%dT%T%z)
|
||||||
|
git_version=$(git describe --tags --always --long --dirty)
|
||||||
|
package_name=generate-chart
|
||||||
|
|
||||||
|
#platforms=("linux/amd64" "darwin/amd64")
|
||||||
|
platforms=("linux/amd64", "windows/amd64")
|
||||||
|
|
||||||
|
echo Building $package_name with git version: $git_version
|
||||||
|
for platform in "${platforms[@]}"
|
||||||
|
do
|
||||||
|
platform_split=(${platform//\// })
|
||||||
|
GOOS=${platform_split[0]}
|
||||||
|
GOARCH=${platform_split[1]}
|
||||||
|
output_name=$package_name'-'$GOOS'-'$GOARCH
|
||||||
|
if [ $GOOS = "windows" ]; then
|
||||||
|
output_name+='.exe'
|
||||||
|
fi
|
||||||
|
|
||||||
|
starttime=$(TZ=Australia/Sydney date +%Y-%m-%dT%T%z)
|
||||||
|
echo "build commences at $starttime"
|
||||||
|
env GOOS=$GOOS GOARCH=$GOARCH go build -trimpath -ldflags="-X main.sha1ver=$commit -X main.buildTime=$buildtime" -o $output_name $package
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo 'An error has occurred! Aborting the script execution...'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
gzip $output_name
|
||||||
|
echo "build complete at $buildtime : $output_name"
|
||||||
|
sha256sum ${output_name}.gz > ${output_name}_checksum.txt
|
||||||
|
done
|
||||||
|
|
||||||
|
ls -lah
|
32
.drone.yml
Normal file
32
.drone.yml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: default
|
||||||
|
|
||||||
|
# Docs at https://docs.drone.io/pipeline/exec/overview/
|
||||||
|
# Also see https://github.com/harness/drone-cli/blob/master/.drone.yml
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: build
|
||||||
|
image: golang
|
||||||
|
environment:
|
||||||
|
CGO_ENABLED: 0
|
||||||
|
commands:
|
||||||
|
- sh ./.drone.sh
|
||||||
|
|
||||||
|
|
||||||
|
- name: dell-sftp-deploy
|
||||||
|
image: hypervtechnics/drone-sftp
|
||||||
|
settings:
|
||||||
|
host: deft.dell.com
|
||||||
|
username:
|
||||||
|
from_secret: DELLFTP_USER
|
||||||
|
password:
|
||||||
|
from_secret: DELLFTP_PASS
|
||||||
|
port: 22
|
||||||
|
source: ./
|
||||||
|
filter: generate-chart*
|
||||||
|
clean: false
|
||||||
|
target: /
|
||||||
|
overwrite: true
|
||||||
|
verbose: true
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*.json
|
||||||
|
*.xlsx
|
64
README.md
Normal file
64
README.md
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# Excel Chart Generator
|
||||||
|
|
||||||
|
Using the excellent open source [excelize](https://github.com/qax-os/excelize) library, convert json data tracking numbers over time into an excel workbook of graphs.
|
||||||
|
|
||||||
|
## Input data
|
||||||
|
|
||||||
|
Here is some sample input data. Note that some of these key names are hard coded in the source code in order to reduce complexity.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"Tracking": {
|
||||||
|
"AVG data 1": {
|
||||||
|
"Low": {
|
||||||
|
"DC1": {
|
||||||
|
"September-2024": 17948.94,
|
||||||
|
"August-2024": 17947.40,
|
||||||
|
"July-2024": 17470.34,
|
||||||
|
"June-2024": 17648.02,
|
||||||
|
"May-2024": 17314.25
|
||||||
|
},
|
||||||
|
"DC2": {
|
||||||
|
"September-2024": 21226.84,
|
||||||
|
"August-2024": 20956.31,
|
||||||
|
"July-2024": 20021.72,
|
||||||
|
"June-2024": 19713.80,
|
||||||
|
"May-2024": 19945.32
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Ultra": {
|
||||||
|
"DC1": {
|
||||||
|
"September-2024": 4544,
|
||||||
|
"August-2024": 4544,
|
||||||
|
"July-2024": 4685.90,
|
||||||
|
"June-2024": 4741.55,
|
||||||
|
"May-2024": 4830.26
|
||||||
|
},
|
||||||
|
"DC2": {
|
||||||
|
"September-2024": 5369.58,
|
||||||
|
"August-2024": 5372,
|
||||||
|
"July-2024": 5357.38,
|
||||||
|
"June-2024": 5344.6,
|
||||||
|
"May-2024": 5306.26
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"count 1": {
|
||||||
|
"DC1": {
|
||||||
|
"September-2024": 6801.80,
|
||||||
|
"August-2024": 6804.71,
|
||||||
|
"July-2024": 6664.03,
|
||||||
|
"June-2024": 6673.87,
|
||||||
|
"May-2024": 6656.42
|
||||||
|
},
|
||||||
|
"DC2": {
|
||||||
|
"September-2024": 6751.17,
|
||||||
|
"August-2024": 6765.42,
|
||||||
|
"July-2024": 6597.65,
|
||||||
|
"June-2024": 6510.47,
|
||||||
|
"May-2024": 6487.19
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
9
main.go
9
main.go
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
@@ -239,6 +240,10 @@ func AvgChart(f *excelize.File, worksheetName string, location string, avgCpuCol
|
|||||||
func main() {
|
func main() {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
inputFile := flag.String("input", "input.json", "The filename from which to load historical data")
|
||||||
|
outputFile := flag.String("output", "book1.xlsx", "The filename to use when writing excel workbook")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
// Create the workbook
|
// Create the workbook
|
||||||
f := excelize.NewFile()
|
f := excelize.NewFile()
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -252,7 +257,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Load the JSON data from file
|
// Load the JSON data from file
|
||||||
file, err := os.Open("input.json")
|
file, err := os.Open(*inputFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Failed to open input.json: %v", err)
|
log.Fatalf("Failed to open input.json: %v", err)
|
||||||
}
|
}
|
||||||
@@ -271,7 +276,7 @@ func main() {
|
|||||||
GenerateCharts(f, data.Tracking.VmCount, "VM Count", "N60")
|
GenerateCharts(f, data.Tracking.VmCount, "VM Count", "N60")
|
||||||
|
|
||||||
// Save workbook
|
// Save workbook
|
||||||
if err := f.SaveAs("Book1.xlsx"); err != nil {
|
if err := f.SaveAs(*outputFile); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user