Skip to content

Commit 6e75e4b

Browse files
authored
Merge pull request #111 from kloia/refactoring-codebase
Refactoring codebase
2 parents e58debf + f9a7241 commit 6e75e4b

File tree

3 files changed

+63
-35
lines changed

3 files changed

+63
-35
lines changed

entrypoint/pkg/helper/Helper.go

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,47 +17,55 @@ import (
1717
"gopkg.in/yaml.v3"
1818

1919
"io"
20-
"io/ioutil"
2120
"os"
2221
"path/filepath"
2322
)
2423

2524
// Reads content of the yaml file and returns it
2625
func ReadFile(filename string) map[string]interface{} {
2726
log := logger.GetLogger()
28-
log.Debug("START: READ FILE", zap.String("filename", filename))
29-
yamlFile, err := ioutil.ReadFile(filename)
27+
log.Debug("START: READ FILE")
28+
yamlFile, err := os.ReadFile(filename)
3029
if err != nil {
31-
log.Debug("Could not open",
32-
zap.String("filename", filename))
30+
log.Debug("Could not open", zap.String("filename", filename))
31+
return nil
3332
}
3433

3534
m := make(map[string]interface{})
36-
err = yaml.Unmarshal(yamlFile, m)
35+
err = yaml.Unmarshal(yamlFile, &m)
3736
if err != nil {
38-
log.Debug("Could not decode map",
39-
zap.Any("map", m))
37+
log.Debug("Could not decode map", zap.Any("map", m))
4038
}
41-
log.Debug("END: READ FILE", zap.String("filename", filename))
39+
log.Debug("END: READ FILE")
4240
return m
4341
}
4442

4543
// Writes content to a yaml file
4644

47-
func WriteFile(filename string, data map[string]interface{}) error {
45+
func WriteFile(filename string, data map[string]interface{}, keepHeader bool) error {
4846
log := logger.GetLogger()
4947
log.Debug("START: WRITE FILE", zap.String("filename", filename))
48+
5049
var b bytes.Buffer
50+
if keepHeader {
51+
b.WriteString("---\n")
52+
}
53+
5154
yamlEncoder := yaml.NewEncoder(&b)
5255
yamlEncoder.SetIndent(2)
56+
if err := yamlEncoder.Encode(data); err != nil {
57+
log.Error("Failed to encode YAML", zap.Error(err))
58+
return err
59+
}
60+
yamlEncoder.Close()
5361

54-
yamlEncoder.Encode(&data)
55-
err := ioutil.WriteFile(filename, b.Bytes(), 0644)
62+
err := os.WriteFile(filename, b.Bytes(), 0644)
5663
if err != nil {
57-
log.Error("Error while writing file ", zap.Error(err), zap.String("filename", filename))
64+
log.Error("Failed to write file", zap.Error(err), zap.String("filename", filename))
5865
}
66+
5967
log.Debug("END: WRITE FILE", zap.String("filename", filename))
60-
return nil
68+
return err
6169
}
6270

6371
// Basically we have two map and we compare them if there are some sort of values that should be changed according to its logic
@@ -73,6 +81,7 @@ func Intersection(inputMap, defaultMap map[string]interface{}) (newMap map[strin
7381
_, ok := defaultMap[inputKey]
7482
if ok {
7583
newMap[inputKey] = inputVal
84+
fmt.Printf("adding to intersectionMap[%s] as this value ->: %s\n", inputKey, newMap[inputKey])
7685
}
7786
}
7887
}
@@ -90,51 +99,60 @@ func UpdateValuesFile(valuesModel map[string]interface{}, varsPath string) error
9099
if !info.IsDir() && filepath.Ext(path) == ".yaml" || filepath.Ext(path) == ".yml" {
91100
defaultModel := ReadFile(path)
92101
intersectionMap := Intersection(valuesModel, defaultModel)
93-
if len(intersectionMap) > 0 {
102+
if isMapNotEmpty(intersectionMap) { // this checks whether intersection map is truly empty or not
94103
log.Debug("INTERSECTION", zap.Any("map", intersectionMap))
95104
mergo.Merge(&defaultModel, intersectionMap, mergo.WithOverride)
96-
WriteFile(path, defaultModel)
105+
WriteFile(path, defaultModel, true)
97106
}
98107
}
99108
return nil
100109
})
101110
}
102111

103-
func Untar(tarball, target string) error {
112+
// isMapNotEmpty, checks if the map is empty or not
113+
func isMapNotEmpty(m map[string]interface{}) bool {
114+
for _, value := range m {
115+
switch v := value.(type) {
116+
case map[string]interface{}:
117+
if isMapNotEmpty(v) {
118+
return true // there is at least one non-empty map
119+
}
120+
default:
121+
return true // there is at least one non-empty value
122+
}
123+
}
124+
return false // map is empty
125+
}
104126

127+
func Untar(tarball, target string) error {
105128
reader, err := os.Open(tarball)
106129
log := logger.GetLogger()
107130
if err != nil {
108131
log.Debug("Bundle file could not be opened.")
109132
return err
110133
}
111-
log.Debug("Bundle file exists.")
112134
defer reader.Close()
113135

114136
gzf, err := gzip.NewReader(reader)
115137
if err != nil {
116-
fmt.Println(err)
117-
os.Exit(1)
138+
return err
118139
}
119-
log.Debug("Gunzip done.")
140+
defer gzf.Close()
120141

121142
tarReader := tar.NewReader(gzf)
122143

123144
for {
124145
header, err := tarReader.Next()
125-
126146
if err == io.EOF {
127147
break
128148
} else if err != nil {
129-
130149
return err
131150
}
132151

133152
path := filepath.Join(target, header.Name)
134153
info := header.FileInfo()
135154
if info.IsDir() {
136-
if err = os.MkdirAll(path, info.Mode()); err != nil {
137-
155+
if err := os.MkdirAll(path, info.Mode()); err != nil {
138156
return err
139157
}
140158
continue
@@ -144,13 +162,13 @@ func Untar(tarball, target string) error {
144162
if err != nil {
145163
return err
146164
}
147-
defer file.Close()
148-
_, err = io.Copy(file, tarReader)
149-
if err != nil {
165+
166+
if _, err := io.Copy(file, tarReader); err != nil {
167+
file.Close() // Ensure file is closed in case of error
150168
return err
151169
}
170+
file.Close() // Moved from defer to close immediately after use
152171
}
153-
log.Debug("Untar done.")
154172
return nil
155173
}
156174

entrypoint/pkg/klopac/Klopac.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@ func Run() {
5757
log.Info("[KLOPAC FLOW - START]",
5858
zap.Bool("provision", provision),
5959
zap.Bool("validate", validate),
60-
zap.Bool("healthcheck", healthCheck))
60+
zap.Bool("healthcheck", healthCheck),
61+
zap.String("started ,", "true"))
6162
helper.GetFlowService().Run(provision, validate, healthCheck, logLevel, bundleFileExists)
62-
log.Info("[KLOPAC FLOW - END]")
63+
log.Info("[KLOPAC FLOW - END]", zap.String("finished", "true"))
6364
}
6465
}
6566

@@ -97,7 +98,7 @@ func createDefaultFile(varsPath, rootKey, innerKey string, innerValue interface{
9798
//Create Default File with Version Variable
9899
jsonString := fmt.Sprintf(`{"%v":{"%v": {"version": "%v"}}}`, rootKey, innerKey, innerValue.(map[string]interface{})["version"])
99100
jsonMap, _ := convertStringToJsonMap(jsonString)
100-
helper.WriteFile(newDefaultObjectPath, jsonMap)
101+
helper.WriteFile(newDefaultObjectPath, jsonMap, false)
101102

102103
//In App or Int Layer, Create New Domain Object
103104
deleteKeyFromDomainObject(innerValue.(map[string]interface{}), []string{"version"})
@@ -124,7 +125,7 @@ func mergeFiles(varsPath, rootKey string, jsonMap map[string]interface{}) {
124125
filePath := fmt.Sprintf("%v/%v", varsPath, fileName)
125126
defaultModel := helper.ReadFile(filePath)
126127
mergo.Merge(&defaultModel, jsonMap)
127-
helper.WriteFile(filePath, defaultModel)
128+
helper.WriteFile(filePath, defaultModel, true)
128129
}
129130

130131
func createRunnerFile(innerKey, manifestsPath string, innerValue interface{}, valuesModel map[string]interface{}) {
@@ -138,7 +139,7 @@ func createRunnerFile(innerKey, manifestsPath string, innerValue interface{}, va
138139
newManifestObjectPath := fmt.Sprintf("%v/%v/%v-%v.yaml", manifestsPath, manifestType, innerKey, newPlatformObject.(map[string]interface{})[extension])
139140
jsonMap, _ := convertStringToJsonMap(fmt.Sprintf(`{"platform":{"%v": {"%v": {}}}}`, manifestType, innerKey))
140141
jsonMap["platform"].(map[string]interface{})[manifestType].(map[string]interface{})[innerKey] = newPlatformObject
141-
helper.WriteFile(newManifestObjectPath, jsonMap)
142+
helper.WriteFile(newManifestObjectPath, jsonMap, false)
142143
}
143144
}
144145
}

entrypoint/pkg/logger/Logger.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package logger
22

33
import (
4+
"fmt"
45
"os"
56

67
"go.uber.org/zap"
@@ -14,16 +15,24 @@ func InitializeLogger(loglevel string, outputFile string) {
1415
config.EncodeTime = zapcore.ISO8601TimeEncoder
1516
fileEncoder := zapcore.NewJSONEncoder(config)
1617
consoleEncoder := zapcore.NewConsoleEncoder(config)
17-
logFile, _ := os.OpenFile(outputFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
18+
19+
logFile, err := os.OpenFile(outputFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
20+
if err != nil {
21+
fmt.Printf("Error while opening log file '%s': %v\n", outputFile, err)
22+
os.Exit(1) //
23+
}
24+
1825
writer := zapcore.AddSync(logFile)
1926
defaultLogLevel, err := zapcore.ParseLevel(loglevel)
2027
if err != nil {
2128
defaultLogLevel = zapcore.InfoLevel
2229
}
30+
2331
core := zapcore.NewTee(
2432
zapcore.NewCore(fileEncoder, writer, defaultLogLevel),
2533
zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), defaultLogLevel),
2634
)
35+
2736
logger = zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
2837
}
2938

0 commit comments

Comments
 (0)