Skip to content

Commit 006fb21

Browse files
Made changes so that we get logs when a command starts no matter that it is finished or not
1 parent 72e946c commit 006fb21

File tree

6 files changed

+68
-22
lines changed

6 files changed

+68
-22
lines changed

Diff for: cmd/minikube/cmd/root.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"path/filepath"
2424
"runtime"
2525
"strings"
26-
"time"
2726

2827
"github.com/spf13/cobra"
2928
"github.com/spf13/pflag"
@@ -78,8 +77,16 @@ var RootCmd = &cobra.Command{
7877
// Execute adds all child commands to the root command sets flags appropriately.
7978
// This is called by main.main(). It only needs to happen once to the rootCmd.
8079
func Execute() {
81-
defer audit.Log(time.Now())
82-
80+
auditID, err := audit.LogCommandStart()
81+
if err != nil{
82+
klog.Errorf("%v", err)
83+
}
84+
defer func(){
85+
err := audit.LogCommandEnd(auditID)
86+
if err != nil{
87+
klog.Errorf("%v", err)
88+
}
89+
}()
8390
// Check whether this is a windows binary (.exe) running inisde WSL.
8491
if runtime.GOOS == "windows" && detect.IsMicrosoftWSL() {
8592
var found = false

Diff for: pkg/minikube/audit/audit.go

+34-5
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,17 @@ limitations under the License.
1717
package audit
1818

1919
import (
20+
"encoding/json"
21+
"fmt"
2022
"os"
2123
"os/user"
2224
"strings"
2325
"time"
2426

27+
"github.com/google/uuid"
2528
"github.com/spf13/viper"
26-
"k8s.io/klog/v2"
2729
"k8s.io/minikube/pkg/minikube/config"
30+
"k8s.io/minikube/pkg/minikube/constants"
2831
"k8s.io/minikube/pkg/version"
2932
)
3033

@@ -51,14 +54,40 @@ func args() string {
5154
}
5255

5356
// Log details about the executed command.
54-
func Log(startTime time.Time) {
57+
func LogCommandStart() (string, error) {
5558
if len(os.Args) < 2 || !shouldLog() {
56-
return
59+
return "", fmt.Errorf("This command should not be logged and len(os.Args) : %v, should be less than 2", len(os.Args))
5760
}
58-
r := newRow(os.Args[1], args(), userName(), version.GetVersion(), startTime, time.Now())
61+
id := uuid.New().String()
62+
r := newRow(os.Args[1], args(), userName(), version.GetVersion(), time.Now(), id)
5963
if err := appendToLog(r); err != nil {
60-
klog.Warning(err)
64+
return "", fmt.Errorf("%v", err)
6165
}
66+
return r.id, nil
67+
}
68+
69+
func LogCommandEnd(id string) error {
70+
if currentLogFile == nil {
71+
if err := setLogFile(); err != nil {
72+
return fmt.Errorf("failed to set the log file: %v", err)
73+
}
74+
}
75+
var auditLogs []byte
76+
_, err := currentLogFile.Read(auditLogs)
77+
if err != nil {
78+
return fmt.Errorf("%v", err)
79+
}
80+
var rowSlice []row
81+
err = json.Unmarshal(auditLogs, &rowSlice)
82+
if err != nil {
83+
return fmt.Errorf("%v", err)
84+
}
85+
for _, v := range rowSlice {
86+
if v.id == id {
87+
v.endTime = time.Now().Format(constants.TimeFormat)
88+
}
89+
}
90+
return nil
6291
}
6392

6493
// shouldLog returns if the command should be logged.

Diff for: pkg/minikube/audit/audit_test.go

+11-3
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import (
2020
"os"
2121
"os/user"
2222
"testing"
23-
"time"
2423

24+
"github.com/google/uuid"
2525
"github.com/spf13/viper"
2626
"k8s.io/minikube/pkg/minikube/config"
2727
)
@@ -170,11 +170,19 @@ func TestAudit(t *testing.T) {
170170
})
171171

172172
// Check if logging with limited args causes a panic
173-
t.Run("Log", func(t *testing.T) {
173+
t.Run("LogCommandStart", func(t *testing.T) {
174174
oldArgs := os.Args
175175
defer func() { os.Args = oldArgs }()
176176
os.Args = []string{"minikube"}
177177

178-
Log(time.Now())
178+
LogCommandStart()
179+
})
180+
181+
t.Run("LogCommandEnd", func(t *testing.T) {
182+
oldArgs := os.Args
183+
defer func() { os.Args = oldArgs }()
184+
os.Args = []string{"minikube"}
185+
186+
LogCommandEnd(uuid.New().String())
179187
})
180188
}

Diff for: pkg/minikube/audit/logFile_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"testing"
2424
"time"
2525

26+
"github.com/google/uuid"
2627
"k8s.io/minikube/pkg/minikube/localpath"
2728
)
2829

@@ -48,7 +49,7 @@ func TestLogFile(t *testing.T) {
4849
defer func() { currentLogFile = &oldLogFile }()
4950
currentLogFile = f
5051

51-
r := newRow("start", "-v", "user1", "v0.17.1", time.Now(), time.Now())
52+
r := newRow("start", "-v", "user1", "v0.17.1", time.Now(), uuid.New().String())
5253
if err := appendToLog(r); err != nil {
5354
t.Fatalf("Error appendingToLog: %v", err)
5455
}

Diff for: pkg/minikube/audit/row.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ type row struct {
3737
startTime string
3838
user string
3939
version string
40+
id string
4041
Data map[string]string `json:"data"`
4142
}
4243

@@ -72,19 +73,19 @@ func (e *row) toMap() map[string]string {
7273
}
7374

7475
// newRow creates a new audit row.
75-
func newRow(command string, args string, user string, version string, startTime time.Time, endTime time.Time, profile ...string) *row {
76+
func newRow(command string, args string, user string, version string, startTime time.Time, id string, profile ...string) *row {
7677
p := viper.GetString(config.ProfileName)
7778
if len(profile) > 0 {
7879
p = profile[0]
7980
}
8081
return &row{
8182
args: args,
8283
command: command,
83-
endTime: endTime.Format(constants.TimeFormat),
8484
profile: p,
8585
startTime: startTime.Format(constants.TimeFormat),
8686
user: user,
8787
version: version,
88+
id: id,
8889
}
8990
}
9091

Diff for: pkg/minikube/audit/row_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"testing"
2424
"time"
2525

26+
"github.com/google/uuid"
2627
"k8s.io/minikube/pkg/minikube/constants"
2728
)
2829

@@ -34,10 +35,9 @@ func TestRow(t *testing.T) {
3435
v := "v0.17.1"
3536
st := time.Now()
3637
stFormatted := st.Format(constants.TimeFormat)
37-
et := time.Now()
38-
etFormatted := et.Format(constants.TimeFormat)
38+
id := uuid.New().String()
3939

40-
r := newRow(c, a, u, v, st, et, p)
40+
r := newRow(c, a, u, v, st, id, p)
4141

4242
t.Run("NewRow", func(t *testing.T) {
4343
tests := []struct {
@@ -51,7 +51,7 @@ func TestRow(t *testing.T) {
5151
{"user", r.user, u},
5252
{"version", r.version, v},
5353
{"startTime", r.startTime, stFormatted},
54-
{"endTime", r.endTime, etFormatted},
54+
{"id", r.id, id},
5555
}
5656

5757
for _, tt := range tests {
@@ -83,7 +83,7 @@ func TestRow(t *testing.T) {
8383
{"user", u},
8484
{"version", v},
8585
{"startTime", stFormatted},
86-
{"endTime", etFormatted},
86+
{"id", id},
8787
}
8888

8989
for _, tt := range tests {
@@ -97,7 +97,7 @@ func TestRow(t *testing.T) {
9797
t.Run("toFields", func(t *testing.T) {
9898
got := r.toFields()
9999
gotString := strings.Join(got, ",")
100-
want := []string{c, a, p, u, v, stFormatted, etFormatted}
100+
want := []string{c, a, p, u, v, stFormatted, id}
101101
wantString := strings.Join(want, ",")
102102

103103
if gotString != wantString {
@@ -106,7 +106,7 @@ func TestRow(t *testing.T) {
106106
})
107107

108108
t.Run("assignFields", func(t *testing.T) {
109-
l := fmt.Sprintf(`{"data":{"args":"%s","command":"%s","endTime":"%s","profile":"%s","startTime":"%s","user":"%s","version":"v0.17.1"},"datacontenttype":"application/json","id":"bc6ec9d4-0d08-4b57-ac3b-db8d67774768","source":"https://minikube.sigs.k8s.io/","specversion":"1.0","type":"io.k8s.sigs.minikube.audit"}`, a, c, etFormatted, p, stFormatted, u)
109+
l := fmt.Sprintf(`{"data":{"args":"%s","command":"%s","id":"%s","profile":"%s","startTime":"%s","user":"%s","version":"v0.17.1"},"datacontenttype":"application/json","id":"bc6ec9d4-0d08-4b57-ac3b-db8d67774768","source":"https://minikube.sigs.k8s.io/","specversion":"1.0","type":"io.k8s.sigs.minikube.audit"}`, a, c, id, p, stFormatted, u)
110110

111111
r := &row{}
112112
if err := json.Unmarshal([]byte(l), r); err != nil {
@@ -126,7 +126,7 @@ func TestRow(t *testing.T) {
126126
{"user", r.user, u},
127127
{"version", r.version, v},
128128
{"startTime", r.startTime, stFormatted},
129-
{"endTime", r.endTime, etFormatted},
129+
{"id", r.id, id},
130130
}
131131

132132
for _, tt := range tests {

0 commit comments

Comments
 (0)