cmd/wasmcloud: log querying
This commit is contained in:
parent
275dc06a7b
commit
59d7356142
|
@ -0,0 +1,73 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/google/subcommands"
|
||||||
|
"within.website/x/writer"
|
||||||
|
)
|
||||||
|
|
||||||
|
type handlerLogsCmd struct{}
|
||||||
|
|
||||||
|
func (handlerLogsCmd) SetFlags(fs *flag.FlagSet) {}
|
||||||
|
func (handlerLogsCmd) Name() string { return "logs" }
|
||||||
|
func (handlerLogsCmd) Synopsis() string { return "shows logs for a handler" }
|
||||||
|
func (handlerLogsCmd) Usage() string {
|
||||||
|
return `wasmcloud logs <handler-name>
|
||||||
|
|
||||||
|
$ wasmcloud logs four-of-aether-60037
|
||||||
|
|
||||||
|
Returns all of the logs for a handler.
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (handlerLogsCmd) Execute(ctx context.Context, fs *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
|
||||||
|
if fs.NArg() != 1 {
|
||||||
|
fmt.Println("usage: wasmcloud create [options] <filename>")
|
||||||
|
return subcommands.ExitUsageError
|
||||||
|
}
|
||||||
|
|
||||||
|
hname := fs.Arg(0)
|
||||||
|
|
||||||
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, *apiServer+"/api/handler/logs?name="+hname, nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
withAPI(req)
|
||||||
|
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
io.Copy(os.Stdout, resp.Body)
|
||||||
|
return subcommands.ExitFailure
|
||||||
|
}
|
||||||
|
|
||||||
|
type resultLine struct {
|
||||||
|
ExecID string `json:"exec_id"`
|
||||||
|
Comment string `json:"comment"`
|
||||||
|
Logs map[string]string `json:"logs"`
|
||||||
|
}
|
||||||
|
var result []resultLine
|
||||||
|
|
||||||
|
err = json.NewDecoder(resp.Body).Decode(&result)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, line := range result {
|
||||||
|
wr := writer.LineSplitting(writer.PrefixWriter(line.ExecID[:5]+" | ", os.Stdout))
|
||||||
|
fmt.Fprintln(wr, line.Logs["logs.txt"])
|
||||||
|
}
|
||||||
|
|
||||||
|
return subcommands.ExitSuccess
|
||||||
|
}
|
|
@ -21,6 +21,7 @@ func main() {
|
||||||
subcommands.Register(&loginCmd{}, "api")
|
subcommands.Register(&loginCmd{}, "api")
|
||||||
subcommands.Register(&whoamiCmd{}, "api")
|
subcommands.Register(&whoamiCmd{}, "api")
|
||||||
subcommands.Register(&handlerCreateCmd{}, "handlers")
|
subcommands.Register(&handlerCreateCmd{}, "handlers")
|
||||||
|
subcommands.Register(handlerLogsCmd{}, "handlers")
|
||||||
subcommands.Register(namegenCmd{}, "utils")
|
subcommands.Register(namegenCmd{}, "utils")
|
||||||
subcommands.Register(&runCmd{}, "utils")
|
subcommands.Register(&runCmd{}, "utils")
|
||||||
subcommands.ImportantFlag("api-server")
|
subcommands.ImportantFlag("api-server")
|
||||||
|
|
|
@ -185,6 +185,11 @@ func invokeHandler(w http.ResponseWriter, r *http.Request, u *User) {
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
f := ln.F{
|
||||||
|
"name": name,
|
||||||
|
"run_id": execID,
|
||||||
|
}
|
||||||
|
ln.Log(ctx, ln.Action("invoke-handler"), f)
|
||||||
msg, err := nc.Request(internal.TopicName, encData, 5*time.Minute)
|
msg, err := nc.Request(internal.TopicName, encData, 5*time.Minute)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ln.Error(ctx, err)
|
ln.Error(ctx, err)
|
||||||
|
@ -211,5 +216,7 @@ func invokeHandler(w http.ResponseWriter, r *http.Request, u *User) {
|
||||||
ln.Error(ctx, err)
|
ln.Error(ctx, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ln.Log(ctx, ln.Action("saving-logs"), f)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
nats "github.com/nats-io/nats.go"
|
nats "github.com/nats-io/nats.go"
|
||||||
|
"within.website/ln/ex"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -66,5 +67,5 @@ func main() {
|
||||||
rtr.PathPrefix("/static/").Handler(http.FileServer(http.Dir(".")))
|
rtr.PathPrefix("/static/").Handler(http.FileServer(http.Dir(".")))
|
||||||
|
|
||||||
log.Printf("listening on http://wasmcloud.kahless.cetacean.club:%s", *port)
|
log.Printf("listening on http://wasmcloud.kahless.cetacean.club:%s", *port)
|
||||||
http.ListenAndServe(":"+*port, rtr)
|
http.ListenAndServe(":"+*port, ex.HTTPLog(rtr))
|
||||||
}
|
}
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -23,5 +23,5 @@ require (
|
||||||
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392
|
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392
|
||||||
within.website/ln v0.7.0
|
within.website/ln v0.7.0
|
||||||
within.website/olin v0.1.1
|
within.website/olin v0.1.1
|
||||||
within.website/x v1.2.0
|
within.website/x v1.2.1
|
||||||
)
|
)
|
||||||
|
|
3
go.sum
3
go.sum
|
@ -366,6 +366,7 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g=
|
||||||
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
@ -448,3 +449,5 @@ within.website/olin v0.1.1 h1:y5kYkBMLcyZjt31d0bRiKhqVR4MEF3RTDk9uIjrvrds=
|
||||||
within.website/olin v0.1.1/go.mod h1:x+83GWNkYGcu7B9d+4CNk3+5KtaXrVzCJo0kq9tezXI=
|
within.website/olin v0.1.1/go.mod h1:x+83GWNkYGcu7B9d+4CNk3+5KtaXrVzCJo0kq9tezXI=
|
||||||
within.website/x v1.2.0 h1:ZR/H2en2569p9og4Kx4hrDW2qyDtpVZ9upXOlCh/YGY=
|
within.website/x v1.2.0 h1:ZR/H2en2569p9og4Kx4hrDW2qyDtpVZ9upXOlCh/YGY=
|
||||||
within.website/x v1.2.0/go.mod h1:f6yg4hO/pprWxgRNHxKZU0Z/aKCsZq+WLg3iR8n1V6U=
|
within.website/x v1.2.0/go.mod h1:f6yg4hO/pprWxgRNHxKZU0Z/aKCsZq+WLg3iR8n1V6U=
|
||||||
|
within.website/x v1.2.1 h1:prNr9fWf/O7irD2hS/1na7GW/jiWdbuLnWNy1ZMkf+8=
|
||||||
|
within.website/x v1.2.1/go.mod h1:f6yg4hO/pprWxgRNHxKZU0Z/aKCsZq+WLg3iR8n1V6U=
|
||||||
|
|
Loading…
Reference in New Issue