Skip to content

Commit 23755aa

Browse files
authored
Lifei/oltp data (#8458)
1 parent 8b2c6e0 commit 23755aa

File tree

5 files changed

+69
-26
lines changed

5 files changed

+69
-26
lines changed

crates/goose-server/src/routes/session_events.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ pub struct SessionReplyRequest {
3535
pub user_message: Message,
3636
#[serde(default)]
3737
pub override_conversation: Option<Vec<Message>>,
38-
pub recipe_name: Option<String>,
39-
pub recipe_version: Option<String>,
4038
}
4139

4240
#[derive(Debug, Serialize, utoipa::ToSchema)]
@@ -287,7 +285,7 @@ pub async fn session_reply(
287285
}
288286

289287
// Validate session exists before allocating a bus/registering work
290-
state
288+
let session_data = state
291289
.session_manager()
292290
.get_session(&session_id, false)
293291
.await
@@ -302,17 +300,12 @@ pub async fn session_reply(
302300
"Session started"
303301
);
304302

305-
if let Some(recipe_name) = request.recipe_name.clone() {
303+
if let Some(ref recipe) = session_data.recipe {
306304
if state.mark_recipe_run_if_absent(&session_id).await {
307-
let recipe_version = request
308-
.recipe_version
309-
.clone()
310-
.unwrap_or_else(|| "unknown".to_string());
311-
312305
tracing::info!(
313306
monotonic_counter.goose.recipe_runs = 1,
314-
recipe_name = %recipe_name,
315-
recipe_version = %recipe_version,
307+
recipe_name = %recipe.title,
308+
recipe_version = %recipe.version,
316309
session_type = "app",
317310
interface = "ui",
318311
"Recipe execution started"

crates/goose/src/scheduler.rs

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -839,8 +839,31 @@ async fn execute_job(
839839
}
840840
drop(jobs_guard);
841841

842-
#[cfg(feature = "telemetry")]
843842
let start_time = std::time::Instant::now();
843+
844+
let recipe_display_name = recipe_path
845+
.file_name()
846+
.and_then(|name| name.to_str())
847+
.unwrap_or(&job.id);
848+
let recipe_version = recipe.version.clone();
849+
850+
tracing::info!(
851+
monotonic_counter.goose.session_starts = 1,
852+
session_type = "schedule",
853+
interface = "scheduler",
854+
interactive = false,
855+
"Scheduled session started"
856+
);
857+
858+
tracing::info!(
859+
monotonic_counter.goose.recipe_runs = 1,
860+
recipe_name = %recipe_display_name,
861+
recipe_version = %recipe_version,
862+
session_type = "schedule",
863+
interface = "scheduler",
864+
"Recipe execution started"
865+
);
866+
844867
#[cfg(feature = "telemetry")]
845868
tokio::spawn(async move {
846869
let mut props = HashMap::new();
@@ -884,6 +907,7 @@ async fn execute_job(
884907
use futures::StreamExt;
885908
let mut stream = std::pin::pin!(stream);
886909

910+
let mut stream_error = false;
887911
while let Some(message_result) = stream.next().await {
888912
tokio::task::yield_now().await;
889913

@@ -897,6 +921,7 @@ async fn execute_job(
897921
Ok(_) => {}
898922
Err(e) => {
899923
tracing::error!("Error in agent stream: {}", e);
924+
stream_error = true;
900925
break;
901926
}
902927
}
@@ -911,6 +936,45 @@ async fn execute_job(
911936
.apply()
912937
.await?;
913938

939+
{
940+
let session_duration = start_time.elapsed();
941+
let exit_type = if stream_error { "error" } else { "normal" };
942+
let (total_tokens, message_count) = agent
943+
.config
944+
.session_manager
945+
.get_session(&session.id, false)
946+
.await
947+
.map(|s| (s.total_tokens.unwrap_or(0), s.message_count))
948+
.unwrap_or((0, 0));
949+
950+
tracing::info!(
951+
monotonic_counter.goose.session_completions = 1,
952+
session_type = "schedule",
953+
interface = "scheduler",
954+
exit_type,
955+
duration_ms = session_duration.as_millis() as u64,
956+
total_tokens,
957+
message_count,
958+
"Session completed"
959+
);
960+
961+
tracing::info!(
962+
monotonic_counter.goose.session_duration_ms = session_duration.as_millis() as u64,
963+
session_type = "schedule",
964+
interface = "scheduler",
965+
"Session duration"
966+
);
967+
968+
if total_tokens > 0 {
969+
tracing::info!(
970+
monotonic_counter.goose.session_tokens = total_tokens,
971+
session_type = "schedule",
972+
interface = "scheduler",
973+
"Session tokens"
974+
);
975+
}
976+
}
977+
914978
#[cfg(feature = "telemetry")]
915979
{
916980
let duration_secs = start_time.elapsed().as_secs();

ui/desktop/openapi.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7944,14 +7944,6 @@
79447944
},
79457945
"nullable": true
79467946
},
7947-
"recipe_name": {
7948-
"type": "string",
7949-
"nullable": true
7950-
},
7951-
"recipe_version": {
7952-
"type": "string",
7953-
"nullable": true
7954-
},
79557947
"request_id": {
79567948
"type": "string",
79577949
"description": "Client-generated UUIDv7 identifying this request."

ui/desktop/src/api/types.gen.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,8 +1295,6 @@ export type SessionListResponse = {
12951295

12961296
export type SessionReplyRequest = {
12971297
override_conversation?: Array<Message> | null;
1298-
recipe_name?: string | null;
1299-
recipe_version?: string | null;
13001298
/**
13011299
* Client-generated UUIDv7 identifying this request.
13021300
*/

ui/desktop/src/hooks/useChatStream.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -583,8 +583,6 @@ export function useChatStream({
583583
userMessage: Message,
584584
currentMessages: Message[],
585585
overrideConversation?: Message[],
586-
recipeName?: string,
587-
recipeVersion?: string,
588586
) => {
589587
const requestId = uuidv7();
590588
const abortController = new AbortController();
@@ -624,8 +622,6 @@ export function useChatStream({
624622
request_id: requestId,
625623
user_message: userMessage,
626624
override_conversation: overrideConversation,
627-
recipe_name: recipeName,
628-
recipe_version: recipeVersion,
629625
},
630626
signal: abortController.signal,
631627
throwOnError: true,

0 commit comments

Comments
 (0)