v0.2.4: BUGFIX deep copy nodes and edges
This commit is contained in:
parent
101bdb92a3
commit
fe6ca819f4
72
main.go
72
main.go
@ -34,7 +34,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
gVersion = "0.2.3"
|
gVersion = "0.2.4"
|
||||||
|
// Default datasource timeout is 10 seconds
|
||||||
|
gDefaultDSTimeout = 10
|
||||||
)
|
)
|
||||||
|
|
||||||
type PromDataSourceConfig struct {
|
type PromDataSourceConfig struct {
|
||||||
@ -120,7 +122,7 @@ func (d *PromDataSourceConfig) GetData(timeRange *MyRange) (float64, error) {
|
|||||||
result, warnings, err = v1api.QueryRange(ctx, d.Query, rng, v1.WithTimeout(time.Duration(d.Timeout)*time.Second))
|
result, warnings, err = v1api.QueryRange(ctx, d.Query, rng, v1.WithTimeout(time.Duration(d.Timeout)*time.Second))
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("DataSourceConfig.GetData: Error querying Prometheus: %v\n", err)
|
log.Errorf("DataSourceConfig.GetData: Error querying Prometheus: %v. Query is: %s\n", err, d.Query)
|
||||||
return 0.0, err
|
return 0.0, err
|
||||||
}
|
}
|
||||||
if len(warnings) > 0 {
|
if len(warnings) > 0 {
|
||||||
@ -425,6 +427,48 @@ func toggleDebug() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deep copy src Node into a new memory space
|
||||||
|
func newNodeClone(src *Node) *Node {
|
||||||
|
return &Node{
|
||||||
|
Name: src.Name,
|
||||||
|
Id: src.Id,
|
||||||
|
Title: src.Title,
|
||||||
|
Subtitle: src.Subtitle,
|
||||||
|
MainStat: src.MainStat,
|
||||||
|
MainStatQuery: src.MainStatQuery,
|
||||||
|
MainStatFormat: src.MainStatFormat,
|
||||||
|
SecondaryStat: src.SecondaryStat,
|
||||||
|
SecondaryStatQuery: src.SecondaryStatQuery,
|
||||||
|
SecondaryStatFormat: src.SecondaryStatFormat,
|
||||||
|
Color: src.Color,
|
||||||
|
Icon: src.Icon,
|
||||||
|
NodeRadius: src.NodeRadius,
|
||||||
|
Highlighted: src.Highlighted,
|
||||||
|
HighlightedQuery: src.HighlightedQuery,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deep copy src Edge into a new memory space
|
||||||
|
func newEdgeClone(src *Edge) *Edge {
|
||||||
|
return &Edge{
|
||||||
|
Id: src.Id,
|
||||||
|
Source: src.Source,
|
||||||
|
Target: src.Target,
|
||||||
|
MainStat: src.MainStat,
|
||||||
|
MainStatQuery: src.MainStatQuery,
|
||||||
|
MainStatFormat: src.MainStatFormat,
|
||||||
|
SecondaryStat: src.SecondaryStat,
|
||||||
|
SecondaryStatQuery: src.SecondaryStatQuery,
|
||||||
|
SecondaryStatFormat: src.SecondaryStatFormat,
|
||||||
|
Color: src.Color,
|
||||||
|
Thickness: src.Thickness,
|
||||||
|
ThicknessQuery: src.ThicknessQuery,
|
||||||
|
Highlighted: src.Highlighted,
|
||||||
|
HighlightedQuery: src.HighlightedQuery,
|
||||||
|
StrokeDashArray: src.StrokeDashArray,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func reloadConfigFile() {
|
func reloadConfigFile() {
|
||||||
// First reread config file
|
// First reread config file
|
||||||
if err := viper.ReadInConfig(); err != nil {
|
if err := viper.ReadInConfig(); err != nil {
|
||||||
@ -451,7 +495,7 @@ func reloadConfigFile() {
|
|||||||
case "chinese":
|
case "chinese":
|
||||||
gPrinter = message.NewPrinter(language.Chinese)
|
gPrinter = message.NewPrinter(language.Chinese)
|
||||||
default:
|
default:
|
||||||
log.Errorf("Language not implented: %s. Fallback to english\n", viper.Get("language").(string))
|
log.Errorf("Language not implemented: %s. Fallback to english\n", viper.Get("language").(string))
|
||||||
gPrinter = message.NewPrinter(language.English)
|
gPrinter = message.NewPrinter(language.English)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -478,19 +522,17 @@ func reloadConfigFile() {
|
|||||||
Edges []Edge `yaml:"edges"`
|
Edges []Edge `yaml:"edges"`
|
||||||
}{}
|
}{}
|
||||||
yaml.Unmarshal(yd, &tmp)
|
yaml.Unmarshal(yd, &tmp)
|
||||||
var graphNodes []Item
|
|
||||||
var graphEdges []Item
|
|
||||||
for _, n := range tmp.Nodes {
|
|
||||||
graphNodes = append(graphNodes, &n)
|
|
||||||
}
|
|
||||||
for _, e := range tmp.Edges {
|
|
||||||
graphEdges = append(graphEdges, &e)
|
|
||||||
}
|
|
||||||
|
|
||||||
graph := Graph{
|
graph := Graph{
|
||||||
Name: tmp.Name,
|
Name: tmp.Name,
|
||||||
Nodes: graphNodes,
|
}
|
||||||
Edges: graphEdges,
|
for _, n := range tmp.Nodes {
|
||||||
|
// Deep copy Node so garbage collecting tmp won't pull the carpet under our feet
|
||||||
|
graph.Nodes = append(graph.Nodes, newNodeClone(&n))
|
||||||
|
}
|
||||||
|
for _, e := range tmp.Edges {
|
||||||
|
// Deep copy Edge
|
||||||
|
graph.Edges = append(graph.Edges, newEdgeClone(&e))
|
||||||
}
|
}
|
||||||
gGraphs = append(gGraphs, graph)
|
gGraphs = append(gGraphs, graph)
|
||||||
}
|
}
|
||||||
@ -504,6 +546,10 @@ func reloadConfigFile() {
|
|||||||
yd, _ := yaml.Marshal(d)
|
yd, _ := yaml.Marshal(d)
|
||||||
var ds PromDataSourceConfig
|
var ds PromDataSourceConfig
|
||||||
yaml.Unmarshal(yd, &ds)
|
yaml.Unmarshal(yd, &ds)
|
||||||
|
// Set default Values
|
||||||
|
if ds.Timeout == 0 {
|
||||||
|
ds.Timeout = gDefaultDSTimeout
|
||||||
|
}
|
||||||
gDataSources = append(gDataSources, ds)
|
gDataSources = append(gDataSources, ds)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user