@@ -3,9 +3,12 @@ package cmd
33import (
44 "context"
55 "fmt"
6+ "io"
7+ "net/http"
8+ "net/url"
9+ "os"
610
711 "github.com/onkernel/hypeman-go"
8- "github.com/onkernel/hypeman-go/option"
912 "github.com/urfave/cli/v3"
1013)
1114
@@ -43,27 +46,54 @@ func handleLogs(ctx context.Context, cmd *cli.Command) error {
4346 return err
4447 }
4548
46- params := hypeman.InstanceStreamLogsParams {}
47- if cmd .IsSet ("follow" ) {
48- params .Follow = hypeman .Opt (cmd .Bool ("follow" ))
49+ // Build URL for logs endpoint
50+ baseURL := cmd .Root ().String ("base-url" )
51+ if baseURL == "" {
52+ baseURL = os .Getenv ("HYPEMAN_BASE_URL" )
4953 }
50- if cmd . IsSet ( "tail" ) {
51- params . Tail = hypeman . Opt ( int64 ( cmd . Int ( "tail" )))
54+ if baseURL == "" {
55+ baseURL = "http://localhost:8080"
5256 }
5357
54- stream := client .Instances .StreamLogsStreaming (
55- ctx ,
56- instanceID ,
57- params ,
58- option .WithMiddleware (debugMiddleware (cmd .Root ().Bool ("debug" ))),
59- )
60- defer stream .Close ()
58+ u , err := url .Parse (baseURL )
59+ if err != nil {
60+ return fmt .Errorf ("invalid base URL: %w" , err )
61+ }
62+ u .Path = fmt .Sprintf ("/instances/%s/logs" , instanceID )
63+
64+ // Add query parameters
65+ q := u .Query ()
66+ q .Set ("tail" , fmt .Sprintf ("%d" , cmd .Int ("tail" )))
67+ if cmd .Bool ("follow" ) {
68+ q .Set ("follow" , "true" )
69+ }
70+ u .RawQuery = q .Encode ()
71+
72+ // Make HTTP request
73+ req , err := http .NewRequestWithContext (ctx , "GET" , u .String (), nil )
74+ if err != nil {
75+ return fmt .Errorf ("failed to create request: %w" , err )
76+ }
77+
78+ apiKey := os .Getenv ("HYPEMAN_API_KEY" )
79+ if apiKey != "" {
80+ req .Header .Set ("Authorization" , fmt .Sprintf ("Bearer %s" , apiKey ))
81+ }
82+
83+ resp , err := http .DefaultClient .Do (req )
84+ if err != nil {
85+ return fmt .Errorf ("failed to fetch logs: %w" , err )
86+ }
87+ defer resp .Body .Close ()
6188
62- for stream .Next () {
63- fmt .Printf ("%s\n " , stream .Current ())
89+ if resp .StatusCode != http .StatusOK {
90+ body , _ := io .ReadAll (resp .Body )
91+ return fmt .Errorf ("failed to fetch logs (HTTP %d): %s" , resp .StatusCode , string (body ))
6492 }
6593
66- return stream .Err ()
94+ // Stream the response to stdout
95+ _ , err = io .Copy (os .Stdout , resp .Body )
96+ return err
6797}
6898
6999
0 commit comments