Skip to content

Commit 2c61c5e

Browse files
Improve TF_LOG_PROVIDER logs (#471)
* Improve TF_LOG_PROVIDER logs * Restyled by gofmt * Exclude escape sequences from length calculations * Restyled by gofmt * Fix cache * Restyled by gofmt * Revert read caching * Improve status conditions * Restyled by gofmt Co-authored-by: Restyled.io <[email protected]>
1 parent 1da8537 commit 2c61c5e

File tree

8 files changed

+176
-155
lines changed

8 files changed

+176
-155
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ require (
88
github.com/Azure/go-autorest/autorest/azure/auth v0.5.8
99
github.com/Azure/go-autorest/autorest/to v0.4.0
1010
github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect
11+
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect
1112
github.com/alessio/shellescape v1.4.1 // indirect
1213
github.com/aohorodnyk/uid v1.1.0
1314
github.com/aws/aws-sdk-go v1.40.27 // indirect

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ github.com/aalpar/deheap v0.0.0-20200318053559-9a0c2883bd56 h1:hJO00l0f92EcQn8Yg
121121
github.com/aalpar/deheap v0.0.0-20200318053559-9a0c2883bd56/go.mod h1:EJFoWbcEEVK22GYKONJjtMNamGYe6p+3x1Pr6zV5gFs=
122122
github.com/abbot/go-http-auth v0.4.0 h1:QjmvZ5gSC7jm3Zg54DqWE/T5m1t2AfDu6QlXJT0EVT0=
123123
github.com/abbot/go-http-auth v0.4.0/go.mod h1:Cz6ARTIzApMJDzh5bRMSUou6UMSp0IEXg9km/ci7TJM=
124+
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8=
125+
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo=
124126
github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk=
125127
github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4=
126128
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=

iterative/utils/logger.go

+37-29
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package utils
33
import (
44
"errors"
55
"fmt"
6+
"math"
67
"strings"
78
"time"
89

10+
"github.com/acarl005/stripansi"
911
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1012
"github.com/sirupsen/logrus"
1113
)
@@ -18,16 +20,17 @@ type basicFormatter struct{}
1820
func (f *basicFormatter) Format(entry *logrus.Entry) ([]byte, error) {
1921
levelText := strings.ToUpper(entry.Level.String())
2022
levelColor := colors[levelText]
21-
tpl := "[%s] 🚀\x1b[%dmTPI\x1b[0m %s\n"
22-
return []byte(fmt.Sprintf(tpl, levelText, levelColor, entry.Message)), nil
23+
newPrefix := fmt.Sprintf("\x1b[%dmTPI [%s]\x1b[0m", levelColor, levelText)
24+
return []byte(hideUnwantedPrefix(levelText, newPrefix, entry.Message)), nil
2325
}
2426

2527
func init() {
2628
colors["DEBUG"] = 34
2729
colors["INFO"] = 36
28-
colors["WARN"] = 33
30+
colors["WARNING"] = 33
2931
colors["ERROR"] = 31
3032
colors["FATAL"] = 31
33+
colors["SUCCESS"] = 32
3134
colors["foreground"] = 35
3235

3336
logrus.SetLevel(logrus.DebugLevel)
@@ -66,46 +69,51 @@ func (f *tpiFormatter) Format(entry *logrus.Entry) ([]byte, error) {
6669

6770
if message == "status" {
6871
status := d.Get("status").(map[string]interface{})
69-
terminatedStr := "terminated 🔵"
7072

71-
running := "queued 🟣"
72-
if status["running"] != nil {
73-
running = terminatedStr
74-
if status["running"].(int) == 1 {
75-
running = "running 🟡"
76-
}
77-
}
73+
message = fmt.Sprintf("\x1b[%dmStatus: queued 🔵\x1b[0m", colors["DEBUG"])
7874

79-
success := ""
80-
if running == terminatedStr {
81-
success = "without any output"
82-
if status["succeeded"] != nil && status["succeeded"].(int) == 1 {
83-
success = "succesfully 🟢"
84-
}
85-
if status["failed"] != nil && status["failed"].(int) == 1 {
86-
success = "with errors 🔴"
87-
}
75+
if status["succeeded"] != nil && status["succeeded"].(int) >= d.Get("parallelism").(int) {
76+
message = fmt.Sprintf("\x1b[%dmStatus: completed succesfully 🟢\x1b[0m", colors["SUCCESS"])
77+
}
78+
if status["failed"] != nil && status["failed"].(int) > 0 {
79+
message = fmt.Sprintf("\x1b[%dmStatus: completed with errors 🔴\x1b[0m", colors["ERROR"])
80+
}
81+
if status["running"] != nil && status["running"].(int) >= d.Get("parallelism").(int) {
82+
message = fmt.Sprintf("\x1b[%dmStatus: running 🟡\x1b[0m", colors["WARNING"])
8883
}
89-
90-
message = fmt.Sprintf("Task %s %s", running, success)
9184
}
9285

9386
if message == "logs" {
87+
message = ""
9488
logs := d.Get("logs").([]interface{})
95-
taskLogs := "No logs"
96-
if len(logs) > 0 {
97-
taskLogs = strings.Replace(logs[0].(string), "\n", fmt.Sprintf("\n[%s] ", levelText), -1)
89+
for index, log := range logs {
90+
prefix := fmt.Sprintf("\n\x1b[%dmLOG %d >> ", colors["foreground"], index)
91+
message += strings.Trim(strings.ReplaceAll("\n"+strings.Trim(log.(string), "\n"), "\n", prefix), "\n")
92+
if index+1 < len(logs) {
93+
message += "\n"
94+
}
9895
}
99-
100-
message = fmt.Sprintf("Task logs:\x1b[%dm%s\x1b[0m", colors["foreground"], taskLogs)
10196
}
10297

103-
tpl := "[%s] \x1b[%dm🚀TPI %s\x1b[0m %s'\n"
104-
return []byte(fmt.Sprintf(tpl, levelText, levelColor, d.Id(), message)), nil
98+
newPrefix := fmt.Sprintf("\x1b[%dmTPI [%s]\x1b[0m", levelColor, levelText)
99+
return []byte(hideUnwantedPrefix(levelText, newPrefix, message)), nil
105100
}
106101

107102
func TpiLogger(d *schema.ResourceData) *logrus.Entry {
108103
logrus.SetFormatter(&tpiFormatter{})
109104

110105
return logrus.WithFields(logrus.Fields{"d": d})
111106
}
107+
108+
func hideUnwantedPrefix(levelText, newPrefix, message string) string {
109+
unwantedPrefixLength := len(fmt.Sprintf("yyyy-mm-ddThh:mm:ss.mmmZ [%s] provider.terraform-provider-iterative: [%[1]s]", levelText))
110+
111+
var output string
112+
for _, line := range strings.Split(message, "\n") {
113+
formattedLine := fmt.Sprintf("[%s]\r%s %s", levelText, newPrefix, line)
114+
padding := strings.Repeat(" ", int(math.Max(float64(unwantedPrefixLength-len(stripansi.Strip(line))), 0)))
115+
output += formattedLine + padding + "\n"
116+
}
117+
118+
return output
119+
}

iterative/utils/logger_test.go

+12-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import (
88

99
func TestState(t *testing.T) {
1010
d := generateSchemaData(t, map[string]interface{}{
11-
"name": "mytask",
11+
"name": "mytask",
12+
"parallelism": "1",
1213
"status": map[string]interface{}{
1314
"running": 0,
1415
"failed": 0,
@@ -21,7 +22,8 @@ func TestState(t *testing.T) {
2122

2223
func TestState2(t *testing.T) {
2324
d := generateSchemaData(t, map[string]interface{}{
24-
"name": "mytask",
25+
"name": "mytask",
26+
"parallelism": "1",
2527
"status": map[string]interface{}{
2628
"running": 0,
2729
"failed": 1,
@@ -34,7 +36,8 @@ func TestState2(t *testing.T) {
3436

3537
func TestState3(t *testing.T) {
3638
d := generateSchemaData(t, map[string]interface{}{
37-
"name": "mytask",
39+
"name": "mytask",
40+
"parallelism": "1",
3841
"status": map[string]interface{}{
3942
"running": 0,
4043
"succeeded": 1,
@@ -141,6 +144,12 @@ func generateSchemaData(t *testing.T, raw map[string]interface{}) *schema.Resour
141144
Type: schema.TypeString,
142145
},
143146
},
147+
"parallelism": {
148+
Type: schema.TypeInt,
149+
ForceNew: true,
150+
Optional: true,
151+
Default: 1,
152+
},
144153
"script": {
145154
Type: schema.TypeString,
146155
ForceNew: true,

task/aws/task.go

+32-32
Original file line numberDiff line numberDiff line change
@@ -93,145 +93,145 @@ type Task struct {
9393
}
9494

9595
func (t *Task) Create(ctx context.Context) error {
96-
logrus.Debug("Creating DefaultVPC...")
96+
logrus.Info("Creating DefaultVPC...")
9797
if err := t.DataSources.DefaultVPC.Read(ctx); err != nil {
9898
return err
9999
}
100-
logrus.Debug("Creating DefaultVPCSubnet...")
100+
logrus.Info("Creating DefaultVPCSubnet...")
101101
if err := t.DataSources.DefaultVPCSubnet.Read(ctx); err != nil {
102102
return err
103103
}
104-
logrus.Debug("Creating Image...")
104+
logrus.Info("Creating Image...")
105105
if err := t.DataSources.Image.Read(ctx); err != nil {
106106
return err
107107
}
108-
logrus.Debug("Creating Bucket...")
108+
logrus.Info("Creating Bucket...")
109109
if err := t.Resources.Bucket.Create(ctx); err != nil {
110110
return err
111111
}
112-
logrus.Debug("Creating SecurityGroup...")
112+
logrus.Info("Creating SecurityGroup...")
113113
if err := t.Resources.SecurityGroup.Create(ctx); err != nil {
114114
return err
115115
}
116-
logrus.Debug("Creating KeyPair...")
116+
logrus.Info("Creating KeyPair...")
117117
if err := t.Resources.KeyPair.Create(ctx); err != nil {
118118
return err
119119
}
120-
logrus.Debug("Creating Credentials...")
120+
logrus.Info("Creating Credentials...")
121121
if err := t.DataSources.Credentials.Read(ctx); err != nil {
122122
return err
123123
}
124-
logrus.Debug("Creating LaunchTemplate...")
124+
logrus.Info("Creating LaunchTemplate...")
125125
if err := t.Resources.LaunchTemplate.Create(ctx); err != nil {
126126
return err
127127
}
128-
logrus.Debug("Creating AutoScalingGroup...")
128+
logrus.Info("Creating AutoScalingGroup...")
129129
if err := t.Resources.AutoScalingGroup.Create(ctx); err != nil {
130130
return err
131131
}
132-
logrus.Debug("Uploading Directory...")
132+
logrus.Info("Uploading Directory...")
133133
if t.Attributes.Environment.Directory != "" {
134134
if err := t.Push(ctx, t.Attributes.Environment.Directory); err != nil {
135135
return err
136136
}
137137
}
138-
logrus.Debug("Starting task...")
138+
logrus.Info("Starting task...")
139139
if err := t.Start(ctx); err != nil {
140140
return err
141141
}
142-
logrus.Debug("Done!")
142+
logrus.Info("Done!")
143143
t.Attributes.Addresses = t.Resources.AutoScalingGroup.Attributes.Addresses
144144
t.Attributes.Status = t.Resources.AutoScalingGroup.Attributes.Status
145145
t.Attributes.Events = t.Resources.AutoScalingGroup.Attributes.Events
146146
return nil
147147
}
148148

149149
func (t *Task) Read(ctx context.Context) error {
150-
logrus.Debug("Reading DefaultVPC...")
150+
logrus.Info("Reading DefaultVPC...")
151151
if err := t.DataSources.DefaultVPC.Read(ctx); err != nil {
152152
return err
153153
}
154-
logrus.Debug("Reading DefaultVPCSubnet...")
154+
logrus.Info("Reading DefaultVPCSubnet...")
155155
if err := t.DataSources.DefaultVPCSubnet.Read(ctx); err != nil {
156156
return err
157157
}
158-
logrus.Debug("Reading Image...")
158+
logrus.Info("Reading Image...")
159159
if err := t.DataSources.Image.Read(ctx); err != nil {
160160
return err
161161
}
162-
logrus.Debug("Reading Bucket...")
162+
logrus.Info("Reading Bucket...")
163163
if err := t.Resources.Bucket.Read(ctx); err != nil {
164164
return err
165165
}
166-
logrus.Debug("Reading Credentials...")
166+
logrus.Info("Reading Credentials...")
167167
if err := t.DataSources.Credentials.Read(ctx); err != nil {
168168
return err
169169
}
170-
logrus.Debug("Reading SecurityGroup...")
170+
logrus.Info("Reading SecurityGroup...")
171171
if err := t.Resources.SecurityGroup.Read(ctx); err != nil {
172172
return err
173173
}
174-
logrus.Debug("Reading KeyPair...")
174+
logrus.Info("Reading KeyPair...")
175175
if err := t.Resources.KeyPair.Read(ctx); err != nil {
176176
return err
177177
}
178-
logrus.Debug("Reading Credentials...")
178+
logrus.Info("Reading Credentials...")
179179
if err := t.DataSources.Credentials.Read(ctx); err != nil {
180180
return err
181181
}
182-
logrus.Debug("Reading LaunchTemplate...")
182+
logrus.Info("Reading LaunchTemplate...")
183183
if err := t.Resources.LaunchTemplate.Read(ctx); err != nil {
184184
return err
185185
}
186-
logrus.Debug("Reading AutoScalingGroup...")
186+
logrus.Info("Reading AutoScalingGroup...")
187187
if err := t.Resources.AutoScalingGroup.Read(ctx); err != nil {
188188
return err
189189
}
190-
logrus.Debug("Done!")
190+
logrus.Info("Done!")
191191
t.Attributes.Addresses = t.Resources.AutoScalingGroup.Attributes.Addresses
192192
t.Attributes.Status = t.Resources.AutoScalingGroup.Attributes.Status
193193
t.Attributes.Events = t.Resources.AutoScalingGroup.Attributes.Events
194194
return nil
195195
}
196196

197197
func (t *Task) Delete(ctx context.Context) error {
198-
logrus.Debug("Downloading Directory...")
198+
logrus.Info("Downloading Directory...")
199199
if t.Read(ctx) == nil {
200200
if t.Attributes.Environment.DirectoryOut != "" {
201201
if err := t.Pull(ctx, t.Attributes.Environment.Directory, t.Attributes.Environment.DirectoryOut); err != nil && err != common.NotFoundError {
202202
return err
203203
}
204204
}
205-
logrus.Debug("Emptying Bucket...")
205+
logrus.Info("Emptying Bucket...")
206206
if err := machine.Delete(ctx, (*t.DataSources.Credentials.Resource)["RCLONE_REMOTE"]); err != nil && err != common.NotFoundError {
207207
return err
208208
}
209209
}
210-
logrus.Debug("Deleting AutoScalingGroup...")
210+
logrus.Info("Deleting AutoScalingGroup...")
211211
if err := t.Resources.AutoScalingGroup.Delete(ctx); err != nil {
212212
return err
213213
}
214-
logrus.Debug("Deleting LaunchTemplate...")
214+
logrus.Info("Deleting LaunchTemplate...")
215215
if err := t.Resources.LaunchTemplate.Delete(ctx); err != nil {
216216
return err
217217
}
218-
logrus.Debug("Deleting KeyPair...")
218+
logrus.Info("Deleting KeyPair...")
219219
if err := t.Resources.KeyPair.Delete(ctx); err != nil {
220220
return err
221221
}
222-
logrus.Debug("Deleting SecurityGroup...")
222+
logrus.Info("Deleting SecurityGroup...")
223223
if err := t.Resources.SecurityGroup.Delete(ctx); err != nil {
224224
return err
225225
}
226-
logrus.Debug("Deleting Credentials...")
226+
logrus.Info("Deleting Credentials...")
227227
if err := t.DataSources.Credentials.Read(ctx); err != nil {
228228
return err
229229
}
230-
logrus.Debug("Deleting Bucket...")
230+
logrus.Info("Deleting Bucket...")
231231
if err := t.Resources.Bucket.Delete(ctx); err != nil {
232232
return err
233233
}
234-
logrus.Debug("Done!")
234+
logrus.Info("Done!")
235235
return nil
236236
}
237237

0 commit comments

Comments
 (0)