in pkg/source/gcp/task/gke/autoscaler/parser.go [101:164]
func parseDecision(ctx context.Context, clusterName string, l *log.LogEntity, cs *history.ChangeSet, builder *history.Builder) error {
jsonDecisionReader, err := l.Fields.ReaderSingle("jsonPayload.decision")
if err != nil {
return err
}
decision, err := parseDecisionFromReader(jsonDecisionReader)
if err != nil {
return err
}
// Parse scale up event
if decision.ScaleUp != nil {
scaleUp := decision.ScaleUp
nodepoolNames := []string{}
requestedSum := 0
for _, mig := range scaleUp.IncreasedMigs {
migResourcePath := resourcepath.Mig(clusterName, mig.Mig.Nodepool, mig.Mig.Name)
cs.RecordEvent(migResourcePath)
nodepoolNames = append(nodepoolNames, mig.Mig.Nodepool)
requestedSum += mig.RequestedNodes
}
for _, pod := range scaleUp.TriggeringPods {
cs.RecordEvent(resourcepath.Pod(pod.Namespace, pod.Name))
}
cs.RecordLogSummary(fmt.Sprintf("Scaling up nodepools by autoscaler: %s (requested: %d in total)", strings.Join(common.DedupStringArray(nodepoolNames), ","), requestedSum))
}
// Parse scale down event
if decision.ScaleDown != nil {
scaleDown := decision.ScaleDown
nodepoolNames := []string{}
for _, nodeToBeRemoved := range scaleDown.NodesToBeRemoved {
migResourcePath := resourcepath.Mig(clusterName, nodeToBeRemoved.Node.Mig.Nodepool, nodeToBeRemoved.Node.Name)
cs.RecordEvent(resourcepath.Node(nodeToBeRemoved.Node.Name))
cs.RecordEvent(migResourcePath)
for _, pod := range nodeToBeRemoved.EvictedPods {
cs.RecordEvent(resourcepath.Pod(pod.Namespace, pod.Name))
}
nodepoolNames = append(nodepoolNames, nodeToBeRemoved.Node.Mig.Nodepool)
}
cs.RecordLogSummary(fmt.Sprintf("Scaling down nodepools by autoscaler: %s (Removing %d nodes in total)", strings.Join(common.DedupStringArray(nodepoolNames), ","), len(scaleDown.NodesToBeRemoved)))
}
// Nodepool creation event
if decision.NodePoolCreated != nil {
nodePoolCreated := decision.NodePoolCreated
nodepools := []string{}
for _, nodepool := range nodePoolCreated.NodePools {
cs.RecordEvent(resourcepath.Nodepool(clusterName, nodepool.Name))
for _, mig := range nodepool.Migs {
migResourcePath := resourcepath.Mig(clusterName, mig.Nodepool, mig.Name)
cs.RecordEvent(migResourcePath)
}
nodepools = append(nodepools, nodepool.Name)
}
cs.RecordLogSummary(fmt.Sprintf("Nodepool created by node auto provisioner: %s", strings.Join(nodepools, ",")))
}
if decision.NodePoolDeleted != nil {
nodepoolDeleted := decision.NodePoolDeleted
for _, nodepool := range nodepoolDeleted.NodePoolNames {
cs.RecordEvent(resourcepath.Nodepool(clusterName, nodepool))
}
cs.RecordLogSummary(fmt.Sprintf("Nodepool deleted by node auto provisioner: %s", strings.Join(nodepoolDeleted.NodePoolNames, ",")))
}
cs.RecordLogSeverity(enum.SeverityWarning)
return nil
}