Skip to content

Commit f444c22

Browse files
feat: Generate log streaming
1 parent 15923bb commit f444c22

File tree

4 files changed

+31
-30
lines changed

4 files changed

+31
-30
lines changed

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 18
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fhypeman-5058541cc0e298a6fc3e9cda1af0e32586d1f39c5666946e15f546c1aedc18ea.yml
3-
openapi_spec_hash: 7f572ac0c7f9dc4f5fc7d9883a53d6c7
4-
config_hash: 35db4c99791f175865381f13a8ad6075
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fhypeman-ce51f144a3d2de556750203edbaa5bfeefe874660737c35a4fc37dfb30057dd5.yml
3+
openapi_spec_hash: 27663b6503056317abcb578ac7b67c06
4+
config_hash: b4e65d240d7bca1ba6162ee2098c8ac2

api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ Methods:
3333
- <code title="get /instances/{id}">client.Instances.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#InstanceService.Get">Get</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go">hypeman</a>.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#Instance">Instance</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
3434
- <code title="get /instances">client.Instances.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#InstanceService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) ([]<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go">hypeman</a>.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#Instance">Instance</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
3535
- <code title="delete /instances/{id}">client.Instances.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#InstanceService.Delete">Delete</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) <a href="https://pkg.go.dev/builtin#error">error</a></code>
36+
- <code title="get /instances/{id}/logs">client.Instances.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#InstanceService.Logs">Logs</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, query <a href="https://pkg.go.dev/github.com/onkernel/hypeman-go">hypeman</a>.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#InstanceLogsParams">InstanceLogsParams</a>) (<a href="https://pkg.go.dev/builtin#string">string</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
3637
- <code title="post /instances/{id}/standby">client.Instances.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#InstanceService.PutInStandby">PutInStandby</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go">hypeman</a>.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#Instance">Instance</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
3738
- <code title="post /instances/{id}/restore">client.Instances.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#InstanceService.RestoreFromStandby">RestoreFromStandby</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go">hypeman</a>.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#Instance">Instance</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
38-
- <code title="get /instances/{id}/logs">client.Instances.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#InstanceService.StreamLogs">StreamLogs</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, query <a href="https://pkg.go.dev/github.com/onkernel/hypeman-go">hypeman</a>.<a href="https://pkg.go.dev/github.com/onkernel/hypeman-go#InstanceStreamLogsParams">InstanceStreamLogsParams</a>) (<a href="https://pkg.go.dev/builtin#string">string</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
3939

4040
## Volumes
4141

client_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -271,10 +271,10 @@ func TestContextDeadlineStreaming(t *testing.T) {
271271
},
272272
}),
273273
)
274-
stream := client.Instances.StreamLogsStreaming(
274+
stream := client.Instances.LogsStreaming(
275275
deadlineCtx,
276276
"id",
277-
hypeman.InstanceStreamLogsParams{},
277+
hypeman.InstanceLogsParams{},
278278
)
279279
for stream.Next() {
280280
_ = stream.Current()
@@ -320,10 +320,10 @@ func TestContextDeadlineStreamingWithRequestTimeout(t *testing.T) {
320320
},
321321
}),
322322
)
323-
stream := client.Instances.StreamLogsStreaming(
323+
stream := client.Instances.LogsStreaming(
324324
context.Background(),
325325
"id",
326-
hypeman.InstanceStreamLogsParams{},
326+
hypeman.InstanceLogsParams{},
327327
option.WithRequestTimeout((100 * time.Millisecond)),
328328
)
329329
for stream.Next() {

instance.go

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,25 @@ func (r *InstanceService) Delete(ctx context.Context, id string, opts ...option.
8282
return
8383
}
8484

85+
// Streams instance console logs as Server-Sent Events. Returns the last N lines
86+
// (controlled by `tail` parameter), then optionally continues streaming new lines
87+
// if `follow=true`.
88+
func (r *InstanceService) LogsStreaming(ctx context.Context, id string, query InstanceLogsParams, opts ...option.RequestOption) (stream *ssestream.Stream[string]) {
89+
var (
90+
raw *http.Response
91+
err error
92+
)
93+
opts = slices.Concat(r.Options, opts)
94+
opts = append([]option.RequestOption{option.WithHeader("Accept", "text/event-stream")}, opts...)
95+
if id == "" {
96+
err = errors.New("missing required id parameter")
97+
return
98+
}
99+
path := fmt.Sprintf("instances/%s/logs", id)
100+
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &raw, opts...)
101+
return ssestream.NewStream[string](ssestream.NewDecoder(raw), err)
102+
}
103+
85104
// Put instance in standby (pause, snapshot, delete VMM)
86105
func (r *InstanceService) PutInStandby(ctx context.Context, id string, opts ...option.RequestOption) (res *Instance, err error) {
87106
opts = slices.Concat(r.Options, opts)
@@ -106,23 +125,6 @@ func (r *InstanceService) RestoreFromStandby(ctx context.Context, id string, opt
106125
return
107126
}
108127

109-
// Stream instance logs (SSE)
110-
func (r *InstanceService) StreamLogsStreaming(ctx context.Context, id string, query InstanceStreamLogsParams, opts ...option.RequestOption) (stream *ssestream.Stream[string]) {
111-
var (
112-
raw *http.Response
113-
err error
114-
)
115-
opts = slices.Concat(r.Options, opts)
116-
opts = append([]option.RequestOption{option.WithHeader("Accept", "text/event-stream")}, opts...)
117-
if id == "" {
118-
err = errors.New("missing required id parameter")
119-
return
120-
}
121-
path := fmt.Sprintf("instances/%s/logs", id)
122-
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &raw, opts...)
123-
return ssestream.NewStream[string](ssestream.NewDecoder(raw), err)
124-
}
125-
126128
type Instance struct {
127129
// Auto-generated unique identifier (CUID2 format)
128130
ID string `json:"id,required"`
@@ -278,17 +280,16 @@ func (r *InstanceNewParamsNetwork) UnmarshalJSON(data []byte) error {
278280
return apijson.UnmarshalRoot(data, r)
279281
}
280282

281-
type InstanceStreamLogsParams struct {
282-
// Follow logs (stream with SSE)
283+
type InstanceLogsParams struct {
284+
// Continue streaming new lines after initial output
283285
Follow param.Opt[bool] `query:"follow,omitzero" json:"-"`
284286
// Number of lines to return from end
285287
Tail param.Opt[int64] `query:"tail,omitzero" json:"-"`
286288
paramObj
287289
}
288290

289-
// URLQuery serializes [InstanceStreamLogsParams]'s query parameters as
290-
// `url.Values`.
291-
func (r InstanceStreamLogsParams) URLQuery() (v url.Values, err error) {
291+
// URLQuery serializes [InstanceLogsParams]'s query parameters as `url.Values`.
292+
func (r InstanceLogsParams) URLQuery() (v url.Values, err error) {
292293
return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
293294
ArrayFormat: apiquery.ArrayQueryFormatComma,
294295
NestedFormat: apiquery.NestedQueryFormatBrackets,

0 commit comments

Comments
 (0)