MCPcopy Create free account
hub / github.com/ccusage/ccusage / create_block

Function create_block

rust/crates/ccusage/src/blocks.rs:73–111  ·  view source on GitHub ↗
(
    start: TimestampMs,
    entries: Vec<LoadedEntry>,
    now: TimestampMs,
    duration: i64,
)

Source from the content-addressed store, hash-verified

71}
72
73fn create_block(
74 start: TimestampMs,
75 entries: Vec<LoadedEntry>,
76 now: TimestampMs,
77 duration: i64,
78) -> SessionBlock {
79 let end = start.checked_add_millis(duration).unwrap_or(start);
80 let actual_end = entries.last().map(|entry| entry.timestamp);
81 let is_active = actual_end.is_some_and(|last| now.duration_since(last) < duration && now < end);
82 let mut token_counts = TokenCounts::default();
83 let mut cost = 0.0;
84 let mut models = Vec::new();
85 let mut seen_models = FxHashSet::default();
86 let mut usage_limit_reset_time = None;
87 for entry in &entries {
88 token_counts.add_usage(entry.data.message.usage);
89 cost += entry.cost;
90 if let Some(model) = &entry.model {
91 let model = crate::model_aliases::resolve_model_name(model).into_owned();
92 if seen_models.insert(model.clone()) {
93 models.push(model);
94 }
95 }
96 usage_limit_reset_time = usage_limit_reset_time.or(entry.usage_limit_reset_time);
97 }
98 SessionBlock {
99 id: format_rfc3339_millis(start),
100 start_time: start,
101 end_time: end,
102 actual_end_time: actual_end,
103 is_active,
104 is_gap: false,
105 entries,
106 token_counts,
107 cost_usd: cost,
108 models,
109 usage_limit_reset_time,
110 }
111}
112
113fn create_gap_block(last: TimestampMs, next: TimestampMs, duration: i64) -> SessionBlock {
114 let start = last.checked_add_millis(duration).unwrap_or(last);

Callers 1

identify_session_blocksFunction · 0.85

Calls 6

resolve_model_nameFunction · 0.85
format_rfc3339_millisFunction · 0.85
checked_add_millisMethod · 0.80
duration_sinceMethod · 0.80
add_usageMethod · 0.80
pushMethod · 0.80

Tested by

no test coverage detected