Skip to content

Commit f624d42

Browse files
authored
Remove verbose flag (#400)
1 parent fa6aa0d commit f624d42

File tree

10 files changed

+44
-130
lines changed

10 files changed

+44
-130
lines changed

.github/ISSUE_TEMPLATE/bug-report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ assignees: ''
3737

3838
### Stack Trace
3939

40-
[If applicable, the stack trace which shows the error. Find it with `cortex logs -v <resource name>`, or use `kubectl get pods -n cortex` and use the name of the failed pod in `kubectl logs <pod name> -n cortex`]
40+
[If applicable, the stack trace which shows the error. Find it with `cortex logs <resource name>`, or use `kubectl get pods -n cortex` and use the name of the failed pod in `kubectl logs <pod name> -n cortex`]
4141

4242
```
4343
<paste stack trace here>

cli/cmd/lib_client.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"os"
2828
"os/signal"
2929
"regexp"
30-
"strconv"
3130
"strings"
3231
"time"
3332

@@ -153,7 +152,7 @@ func HTTPUploadZip(endpoint string, zipInput *zip.Input, fileName string, qParam
153152
return HTTPUpload(endpoint, uploadInput, qParams...)
154153
}
155154

156-
func StreamLogs(appName string, resourceName string, resourceType string, verbose bool) error {
155+
func StreamLogs(appName string, resourceName string, resourceType string) error {
157156
interrupt := make(chan os.Signal, 1)
158157
signal.Notify(interrupt, os.Interrupt)
159158

@@ -166,7 +165,6 @@ func StreamLogs(appName string, resourceName string, resourceType string, verbos
166165
values.Set("resourceName", resourceName)
167166
values.Set("resourceType", resourceType)
168167
values.Set("appName", appName)
169-
values.Set("verbose", strconv.FormatBool(verbose))
170168
req.URL.RawQuery = values.Encode()
171169
wsURL := req.URL.String()
172170
wsURL = strings.Replace(wsURL, "http", "ws", 1)

cli/cmd/logs.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
func init() {
2727
addAppNameFlag(logsCmd)
2828
addEnvFlag(logsCmd)
29-
addVerboseFlag(logsCmd)
3029
// addResourceTypesToHelp(logsCmd)
3130
}
3231

@@ -59,7 +58,7 @@ var logsCmd = &cobra.Command{
5958
errors.Exit(err)
6059
}
6160

62-
err = StreamLogs(appName, resourceName, resourceTypeStr, flagVerbose)
61+
err = StreamLogs(appName, resourceName, resourceTypeStr)
6362
if err != nil {
6463
errors.Exit(err)
6564
}

docs/cluster/cli.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,9 @@ Flags:
4848
-d, --deployment string deployment name
4949
-e, --env string environment (default "dev")
5050
-h, --help help for logs
51-
-v, --verbose show verbose output
5251
```
5352

54-
The `logs` command streams logs from the workload corresponding to the specified resource. For example, `cortex logs api my-api` will stream the logs from the most recent api named `my-api`. `RESOURCE_TYPE` is optional (unless there are name colisions), so `cortex logs my-api` will also work. Using the `-v` or `--verbose` flag will show all of the logs for the workload (not just Cortex's logs).
53+
The `logs` command streams logs from the workload corresponding to the specified resource. For example, `cortex logs api my-api` will stream the logs from the most recent api named `my-api`. `RESOURCE_TYPE` is optional (unless there are name colisions), so `cortex logs my-api` will also work.
5554

5655
## refresh
5756

docs/deployments/request-handlers.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,4 @@ def pre_inference(sample, metadata):
102102
...
103103
```
104104

105-
The output of these logs can be viewed using `cortex logs -v <api_name>`.
105+
The output of these logs can be viewed using `cortex logs <api_name>`.

docs/deployments/statuses.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
| creating | API is being created |
1010
| stopping | API is stopping |
1111
| stopped | API is stopped |
12-
| error | API was not created due to an error; run `cortex logs -v <name>` to view the logs |
12+
| error | API was not created due to an error; run `cortex logs <name>` to view the logs |
1313
| skipped | API was not created due to an error in another resource |
1414
| upstream error | API was not created due to an error in one of its dependencies; a previous version of this API may be ready |
1515
| upstream termination | API was not created because one of its dependencies was terminated; a previous version of this API may be ready |

pkg/operator/endpoints/logs.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ func ReadLogs(w http.ResponseWriter, r *http.Request) {
4040
return
4141
}
4242

43-
verbose := getOptionalBoolQParam("verbose", false, r)
44-
4543
workloadID := getOptionalQParam("workloadID", r)
4644
resourceID := getOptionalQParam("resourceID", r)
4745
resourceName := getOptionalQParam("resourceName", r)
@@ -54,7 +52,7 @@ func ReadLogs(w http.ResponseWriter, r *http.Request) {
5452

5553
if workloadID != "" {
5654
podLabels["workloadID"] = workloadID
57-
readLogs(w, r, podLabels, appName, verbose)
55+
readLogs(w, r, podLabels, appName)
5856
return
5957
}
6058

@@ -70,7 +68,7 @@ func ReadLogs(w http.ResponseWriter, r *http.Request) {
7068
}
7169

7270
podLabels["workloadID"] = workloadID
73-
readLogs(w, r, podLabels, appName, verbose)
71+
readLogs(w, r, podLabels, appName)
7472
return
7573
}
7674

@@ -90,7 +88,7 @@ func ReadLogs(w http.ResponseWriter, r *http.Request) {
9088
} else {
9189
podLabels["workloadID"] = res.GetWorkloadID()
9290
}
93-
readLogs(w, r, podLabels, appName, verbose)
91+
readLogs(w, r, podLabels, appName)
9492
return
9593
}
9694

@@ -103,7 +101,7 @@ func ReadLogs(w http.ResponseWriter, r *http.Request) {
103101
} else {
104102
podLabels["workloadID"] = res.GetWorkloadID()
105103
}
106-
readLogs(w, r, podLabels, appName, verbose)
104+
readLogs(w, r, podLabels, appName)
107105
return
108106
}
109107

@@ -115,15 +113,15 @@ func ReadLogs(w http.ResponseWriter, r *http.Request) {
115113
workloadIDs = slices.UniqueStrings(workloadIDs)
116114
if len(workloadIDs) == 1 {
117115
podLabels["workloadID"] = workloadIDs[0]
118-
readLogs(w, r, podLabels, appName, verbose)
116+
readLogs(w, r, podLabels, appName)
119117
return
120118
}
121119

122120
RespondError(w, err)
123121
return
124122
}
125123

126-
func readLogs(w http.ResponseWriter, r *http.Request, podLabels map[string]string, appName string, verbose bool) {
124+
func readLogs(w http.ResponseWriter, r *http.Request, podLabels map[string]string, appName string) {
127125
upgrader := websocket.Upgrader{}
128126
socket, err := upgrader.Upgrade(w, r, nil)
129127
if err != nil {
@@ -132,5 +130,5 @@ func readLogs(w http.ResponseWriter, r *http.Request, podLabels map[string]strin
132130
}
133131
defer socket.Close()
134132

135-
workloads.ReadLogs(appName, podLabels, verbose, socket)
133+
workloads.ReadLogs(appName, podLabels, socket)
136134
}

pkg/operator/workloads/logs.go

Lines changed: 19 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"fmt"
2222
"io"
2323
"os"
24-
"regexp"
2524
"sort"
2625
"strings"
2726
"time"
@@ -48,7 +47,7 @@ const (
4847
initLogTailLines = 100
4948
)
5049

51-
func ReadLogs(appName string, podSearchLabels map[string]string, verbose bool, socket *websocket.Conn) {
50+
func ReadLogs(appName string, podSearchLabels map[string]string, socket *websocket.Conn) {
5251
wrotePending := false
5352

5453
for true {
@@ -75,26 +74,26 @@ func ReadLogs(appName string, podSearchLabels map[string]string, verbose bool, s
7574

7675
switch {
7776
case len(podMap[k8s.PodStatusSucceeded]) > 0:
78-
getKubectlLogs(podMap[k8s.PodStatusSucceeded], verbose, wrotePending, socket)
77+
getKubectlLogs(podMap[k8s.PodStatusSucceeded], wrotePending, socket)
7978
case len(podMap[k8s.PodStatusRunning]) > 0:
80-
getKubectlLogs(podMap[k8s.PodStatusRunning], verbose, wrotePending, socket)
79+
getKubectlLogs(podMap[k8s.PodStatusRunning], wrotePending, socket)
8180
case len(podMap[k8s.PodStatusPending]) > 0:
82-
getKubectlLogs(podMap[k8s.PodStatusPending], verbose, wrotePending, socket)
81+
getKubectlLogs(podMap[k8s.PodStatusPending], wrotePending, socket)
8382
case len(podMap[k8s.PodStatusKilled]) > 0:
84-
getKubectlLogs(podMap[k8s.PodStatusKilled], verbose, wrotePending, socket)
83+
getKubectlLogs(podMap[k8s.PodStatusKilled], wrotePending, socket)
8584
case len(podMap[k8s.PodStatusKilledOOM]) > 0:
86-
getKubectlLogs(podMap[k8s.PodStatusKilledOOM], verbose, wrotePending, socket)
85+
getKubectlLogs(podMap[k8s.PodStatusKilledOOM], wrotePending, socket)
8786
case len(podMap[k8s.PodStatusFailed]) > 0:
88-
getKubectlLogs(podMap[k8s.PodStatusFailed], verbose, wrotePending, socket)
87+
getKubectlLogs(podMap[k8s.PodStatusFailed], wrotePending, socket)
8988
case len(podMap[k8s.PodStatusTerminating]) > 0:
90-
getKubectlLogs(podMap[k8s.PodStatusTerminating], verbose, wrotePending, socket)
89+
getKubectlLogs(podMap[k8s.PodStatusTerminating], wrotePending, socket)
9190
case len(podMap[k8s.PodStatusUnknown]) > 0:
92-
getKubectlLogs(podMap[k8s.PodStatusUnknown], verbose, wrotePending, socket)
91+
getKubectlLogs(podMap[k8s.PodStatusUnknown], wrotePending, socket)
9392
default: // unexpected
9493
if len(pods) > maxParallelPodLogging {
9594
pods = pods[:maxParallelPodLogging]
9695
}
97-
getKubectlLogs(pods, verbose, wrotePending, socket)
96+
getKubectlLogs(pods, wrotePending, socket)
9897
}
9998
return
10099
}
@@ -108,7 +107,7 @@ func ReadLogs(appName string, podSearchLabels map[string]string, verbose bool, s
108107
}
109108

110109
if isEnded {
111-
getCloudWatchLogs(workloadID, verbose, socket)
110+
getCloudWatchLogs(workloadID, socket)
112111
return
113112
}
114113
}
@@ -124,7 +123,7 @@ func ReadLogs(appName string, podSearchLabels map[string]string, verbose bool, s
124123
}
125124
}
126125

127-
func getKubectlLogs(pods []kcore.Pod, verbose bool, wrotePending bool, socket *websocket.Conn) {
126+
func getKubectlLogs(pods []kcore.Pod, wrotePending bool, socket *websocket.Conn) {
128127
if !wrotePending {
129128
isAllPending := true
130129
for _, pod := range pods {
@@ -152,7 +151,7 @@ func getKubectlLogs(pods []kcore.Pod, verbose bool, wrotePending bool, socket *w
152151
podCheckCancel := make(chan struct{})
153152
defer close(podCheckCancel)
154153

155-
go podCheck(podCheckCancel, socket, pods, verbose, wrotePending, inr)
154+
go podCheck(podCheckCancel, socket, pods, wrotePending, inr)
156155
pumpStdin(socket, inw)
157156
podCheckCancel <- struct{}{}
158157
}
@@ -221,7 +220,7 @@ func createKubectlProcess(logKey LogKey, attrs *os.ProcAttr) (*os.Process, error
221220
return process, nil
222221
}
223222

224-
func podCheck(podCheckCancel chan struct{}, socket *websocket.Conn, initialPodList []kcore.Pod, verbose bool, wrotePending bool, inr *os.File) {
223+
func podCheck(podCheckCancel chan struct{}, socket *websocket.Conn, initialPodList []kcore.Pod, wrotePending bool, inr *os.File) {
225224
timer := time.NewTimer(0)
226225
defer timer.Stop()
227226

@@ -250,7 +249,7 @@ func podCheck(podCheckCancel chan struct{}, socket *websocket.Conn, initialPodLi
250249
socketWriterError := make(chan error, 1)
251250
defer close(socketWriterError)
252251

253-
go pumpStdout(socket, socketWriterError, outr, verbose, true)
252+
go pumpStdout(socket, socketWriterError, outr)
254253

255254
for {
256255
select {
@@ -337,7 +336,7 @@ func deleteProcesses(processMap map[string]*os.Process) {
337336
}
338337
}
339338

340-
func getCloudWatchLogs(prefix string, verbose bool, socket *websocket.Conn) {
339+
func getCloudWatchLogs(prefix string, socket *websocket.Conn) {
341340
logs, err := config.AWS.GetLogs(prefix, config.Cortex.LogGroup)
342341
if err != nil {
343342
config.Telemetry.ReportError(err)
@@ -355,7 +354,7 @@ func getCloudWatchLogs(prefix string, verbose bool, socket *websocket.Conn) {
355354

356355
socketWriterError := make(chan error)
357356
defer close(socketWriterError)
358-
go pumpStdout(socket, socketWriterError, logsReader, verbose, false)
357+
go pumpStdout(socket, socketWriterError, logsReader)
359358

360359
inr, inw, err := os.Pipe()
361360
if err != nil {
@@ -383,23 +382,17 @@ func pumpStdin(socket *websocket.Conn, writer io.Writer) {
383382
}
384383
}
385384

386-
func pumpStdout(socket *websocket.Conn, socketWriterError chan error, reader io.Reader, verbose bool, checkForLastLog bool) {
385+
func pumpStdout(socket *websocket.Conn, socketWriterError chan error, reader io.Reader) {
387386
scanner := bufio.NewScanner(reader)
388387
for scanner.Scan() {
389388
socket.SetWriteDeadline(time.Now().Add(socketWriteDeadlineWait))
390389
logBytes := scanner.Bytes()
391-
isLastLog := false
392-
if !verbose {
393-
logBytes, isLastLog = cleanLogBytes(logBytes)
394-
}
390+
395391
if logBytes != nil {
396392
if !writeSocketBytes(logBytes, socket) {
397393
break
398394
}
399395
}
400-
if isLastLog && checkForLastLog && !verbose {
401-
break
402-
}
403396
}
404397

405398
select {
@@ -416,43 +409,6 @@ func pumpStdout(socket *websocket.Conn, socketWriterError chan error, reader io.
416409
socket.Close()
417410
}
418411

419-
// Pod name is added when streaming from kubectl logs but not for cloudwatch logs, match it if it present and filter it out
420-
var cortexRegex = regexp.MustCompile(`^(\[[A-Za-z0-9\d\-_\s]*\]\ )?(DEBUG|INFO|WARNING|ERROR|CRITICAL):cortex:`)
421-
var lastLogRe = regexp.MustCompile(`^workload: (\w+), completed: (\S+)`)
422-
423-
func extractFromCortexLog(match string, loglevel string, logStr string) (*string, bool) {
424-
if loglevel == "DEBUG" {
425-
return nil, false
426-
}
427-
428-
cutStr := logStr[len(match):]
429-
430-
isLastLog := false
431-
if lastLogRe.MatchString(cutStr) {
432-
isLastLog = true
433-
}
434-
435-
return &cutStr, isLastLog
436-
}
437-
438-
func cleanLog(logStr string) (*string, bool) {
439-
matches := cortexRegex.FindStringSubmatch(logStr)
440-
if len(matches) == 3 {
441-
return extractFromCortexLog(matches[0], matches[2], logStr)
442-
}
443-
444-
return nil, false
445-
}
446-
447-
func cleanLogBytes(logBytes []byte) ([]byte, bool) {
448-
logStr := string(logBytes)
449-
cleanLogStr, isLastLog := cleanLog(logStr)
450-
if cleanLogStr == nil {
451-
return nil, isLastLog
452-
}
453-
return []byte(*cleanLogStr), isLastLog
454-
}
455-
456412
func stopProcess(process *os.Process) {
457413
process.Signal(os.Interrupt)
458414
time.Sleep(5 * time.Second)

pkg/workloads/cortex/onnx_serve/api.py

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -229,15 +229,10 @@ def predict(app_name, api_name):
229229

230230
except CortexException as e:
231231
e.wrap("error", "sample {}".format(i + 1))
232-
logger.error(str(e))
233-
logger.exception(
234-
"An error occurred, see `cx logs -v api {}` for more details.".format(api["name"])
235-
)
232+
logger.exception(str(e))
236233
return prediction_failed(str(e))
237234
except Exception as e:
238-
logger.exception(
239-
"An error occurred, see `cx logs -v api {}` for more details.".format(api["name"])
240-
)
235+
logger.exception(str(e))
241236
return prediction_failed(str(e))
242237

243238
predictions.append(result)
@@ -296,19 +291,13 @@ def start(args):
296291
except CortexException as e:
297292
e.wrap("error")
298293
logger.error(str(e))
299-
if api is not None:
300-
logger.exception(
301-
"An error occured starting the api, see `cx logs -v api {}` for more details".format(
302-
api["name"]
303-
)
304-
)
305294
sys.exit(1)
306295

307296
if api.get("tracker") is not None and api["tracker"].get("model_type") == "classification":
308297
try:
309298
local_cache["class_set"] = api_utils.get_classes(ctx, api["name"])
310299
except Exception as e:
311-
logger.warn("An error occurred while attempting to load classes", exc_info=True)
300+
logger.warn("an error occurred while attempting to load classes", exc_info=True)
312301

313302
serve(app, listen="*:{}".format(args.port))
314303

0 commit comments

Comments
 (0)