github.com/tonto/cli@v0.0.0-20180104210444-aec958fa47db/logs.go (about) 1 package main 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 8 client "github.com/fnproject/cli/client" 9 fnclient "github.com/fnproject/fn_go/client" 10 ccall "github.com/fnproject/fn_go/client/call" 11 apicall "github.com/fnproject/fn_go/client/operations" 12 "github.com/urfave/cli" 13 ) 14 15 type logsCmd struct { 16 client *fnclient.Fn 17 } 18 19 func logs() cli.Command { 20 c := logsCmd{client: client.APIClient()} 21 22 return cli.Command{ 23 Name: "logs", 24 Usage: "manage function calls for apps", 25 Subcommands: []cli.Command{ 26 { 27 Name: "get", 28 Aliases: []string{"g"}, 29 Usage: "get logs for a call. Must provide call_id or last to retrieve the most recent calls logs.", 30 ArgsUsage: "<app> <call-id>", 31 Action: c.get, 32 }, 33 }, 34 } 35 } 36 37 func (log *logsCmd) get(ctx *cli.Context) error { 38 app, callID := ctx.Args().Get(0), ctx.Args().Get(1) 39 if callID == "last" { 40 params := ccall.GetAppsAppCallsParams{ 41 App: app, 42 Context: context.Background(), 43 } 44 resp, err := log.client.Call.GetAppsAppCalls(¶ms) 45 if err != nil { 46 switch e := err.(type) { 47 case *ccall.GetAppsAppCallsNotFound: 48 return errors.New(e.Payload.Error.Message) 49 default: 50 return err 51 } 52 } 53 calls := resp.Payload.Calls 54 if len(calls) > 0 { 55 callID = calls[0].ID 56 } else { 57 return errors.New("No previous calls found.") 58 } 59 } 60 params := apicall.GetAppsAppCallsCallLogParams{ 61 Call: callID, 62 App: app, 63 Context: context.Background(), 64 } 65 resp, err := log.client.Operations.GetAppsAppCallsCallLog(¶ms) 66 if err != nil { 67 switch e := err.(type) { 68 case *apicall.GetAppsAppCallsCallLogNotFound: 69 return fmt.Errorf("%v", e.Payload.Error.Message) 70 default: 71 return err 72 } 73 } 74 fmt.Print(resp.Payload.Log.Log) 75 return nil 76 }