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(&params)
    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(&params)
    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  }