Allow for non-official builds to report telemetry (#13175)
Release Notes: - N/A
This commit is contained in:
parent
be02b2faf4
commit
f489c8b79f
1 changed files with 67 additions and 28 deletions
|
@ -402,12 +402,7 @@ pub async fn post_events(
|
||||||
))?;
|
))?;
|
||||||
};
|
};
|
||||||
|
|
||||||
if checksum != expected {
|
let checksum_matched = checksum == expected;
|
||||||
return Err(Error::Http(
|
|
||||||
StatusCode::BAD_REQUEST,
|
|
||||||
"invalid checksum".into(),
|
|
||||||
))?;
|
|
||||||
}
|
|
||||||
|
|
||||||
let request_body: telemetry_events::EventRequestBody =
|
let request_body: telemetry_events::EventRequestBody =
|
||||||
serde_json::from_slice(&body).map_err(|err| {
|
serde_json::from_slice(&body).map_err(|err| {
|
||||||
|
@ -432,6 +427,7 @@ pub async fn post_events(
|
||||||
&request_body,
|
&request_body,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
country_code.clone(),
|
country_code.clone(),
|
||||||
|
checksum_matched,
|
||||||
)),
|
)),
|
||||||
// Needed for clients sending old copilot_event types
|
// Needed for clients sending old copilot_event types
|
||||||
Event::Copilot(_) => {}
|
Event::Copilot(_) => {}
|
||||||
|
@ -444,6 +440,7 @@ pub async fn post_events(
|
||||||
&request_body,
|
&request_body,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
country_code.clone(),
|
country_code.clone(),
|
||||||
|
checksum_matched,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
Event::Call(event) => to_upload.call_events.push(CallEventRow::from_event(
|
Event::Call(event) => to_upload.call_events.push(CallEventRow::from_event(
|
||||||
|
@ -451,6 +448,7 @@ pub async fn post_events(
|
||||||
&wrapper,
|
&wrapper,
|
||||||
&request_body,
|
&request_body,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
|
checksum_matched,
|
||||||
)),
|
)),
|
||||||
Event::Assistant(event) => {
|
Event::Assistant(event) => {
|
||||||
to_upload
|
to_upload
|
||||||
|
@ -460,6 +458,7 @@ pub async fn post_events(
|
||||||
&wrapper,
|
&wrapper,
|
||||||
&request_body,
|
&request_body,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
|
checksum_matched,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
Event::Cpu(event) => to_upload.cpu_events.push(CpuEventRow::from_event(
|
Event::Cpu(event) => to_upload.cpu_events.push(CpuEventRow::from_event(
|
||||||
|
@ -467,36 +466,42 @@ pub async fn post_events(
|
||||||
&wrapper,
|
&wrapper,
|
||||||
&request_body,
|
&request_body,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
|
checksum_matched,
|
||||||
)),
|
)),
|
||||||
Event::Memory(event) => to_upload.memory_events.push(MemoryEventRow::from_event(
|
Event::Memory(event) => to_upload.memory_events.push(MemoryEventRow::from_event(
|
||||||
event.clone(),
|
event.clone(),
|
||||||
&wrapper,
|
&wrapper,
|
||||||
&request_body,
|
&request_body,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
|
checksum_matched,
|
||||||
)),
|
)),
|
||||||
Event::App(event) => to_upload.app_events.push(AppEventRow::from_event(
|
Event::App(event) => to_upload.app_events.push(AppEventRow::from_event(
|
||||||
event.clone(),
|
event.clone(),
|
||||||
&wrapper,
|
&wrapper,
|
||||||
&request_body,
|
&request_body,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
|
checksum_matched,
|
||||||
)),
|
)),
|
||||||
Event::Setting(event) => to_upload.setting_events.push(SettingEventRow::from_event(
|
Event::Setting(event) => to_upload.setting_events.push(SettingEventRow::from_event(
|
||||||
event.clone(),
|
event.clone(),
|
||||||
&wrapper,
|
&wrapper,
|
||||||
&request_body,
|
&request_body,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
|
checksum_matched,
|
||||||
)),
|
)),
|
||||||
Event::Edit(event) => to_upload.edit_events.push(EditEventRow::from_event(
|
Event::Edit(event) => to_upload.edit_events.push(EditEventRow::from_event(
|
||||||
event.clone(),
|
event.clone(),
|
||||||
&wrapper,
|
&wrapper,
|
||||||
&request_body,
|
&request_body,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
|
checksum_matched,
|
||||||
)),
|
)),
|
||||||
Event::Action(event) => to_upload.action_events.push(ActionEventRow::from_event(
|
Event::Action(event) => to_upload.action_events.push(ActionEventRow::from_event(
|
||||||
event.clone(),
|
event.clone(),
|
||||||
&wrapper,
|
&wrapper,
|
||||||
&request_body,
|
&request_body,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
|
checksum_matched,
|
||||||
)),
|
)),
|
||||||
Event::Extension(event) => {
|
Event::Extension(event) => {
|
||||||
let metadata = app
|
let metadata = app
|
||||||
|
@ -511,6 +516,7 @@ pub async fn post_events(
|
||||||
&request_body,
|
&request_body,
|
||||||
metadata,
|
metadata,
|
||||||
first_event_at,
|
first_event_at,
|
||||||
|
checksum_matched,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -658,29 +664,30 @@ where
|
||||||
|
|
||||||
#[derive(Serialize, Debug, clickhouse::Row)]
|
#[derive(Serialize, Debug, clickhouse::Row)]
|
||||||
pub struct EditorEventRow {
|
pub struct EditorEventRow {
|
||||||
pub installation_id: String,
|
installation_id: String,
|
||||||
pub operation: String,
|
operation: String,
|
||||||
pub app_version: String,
|
app_version: String,
|
||||||
pub file_extension: String,
|
file_extension: String,
|
||||||
pub os_name: String,
|
os_name: String,
|
||||||
pub os_version: String,
|
os_version: String,
|
||||||
pub release_channel: String,
|
release_channel: String,
|
||||||
pub signed_in: bool,
|
signed_in: bool,
|
||||||
pub vim_mode: bool,
|
vim_mode: bool,
|
||||||
#[serde(serialize_with = "serialize_country_code")]
|
#[serde(serialize_with = "serialize_country_code")]
|
||||||
pub country_code: String,
|
country_code: String,
|
||||||
pub region_code: String,
|
region_code: String,
|
||||||
pub city: String,
|
city: String,
|
||||||
pub time: i64,
|
time: i64,
|
||||||
pub copilot_enabled: bool,
|
copilot_enabled: bool,
|
||||||
pub copilot_enabled_for_language: bool,
|
copilot_enabled_for_language: bool,
|
||||||
pub historical_event: bool,
|
historical_event: bool,
|
||||||
pub architecture: String,
|
architecture: String,
|
||||||
pub is_staff: Option<bool>,
|
is_staff: Option<bool>,
|
||||||
pub session_id: Option<String>,
|
session_id: Option<String>,
|
||||||
pub major: Option<i32>,
|
major: Option<i32>,
|
||||||
pub minor: Option<i32>,
|
minor: Option<i32>,
|
||||||
pub patch: Option<i32>,
|
patch: Option<i32>,
|
||||||
|
checksum_matched: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EditorEventRow {
|
impl EditorEventRow {
|
||||||
|
@ -690,6 +697,7 @@ impl EditorEventRow {
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
country_code: Option<String>,
|
country_code: Option<String>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -700,6 +708,7 @@ impl EditorEventRow {
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
|
checksum_matched,
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
os_version: body.os_version.clone().unwrap_or_default(),
|
os_version: body.os_version.clone().unwrap_or_default(),
|
||||||
|
@ -743,6 +752,7 @@ pub struct InlineCompletionEventRow {
|
||||||
major: Option<i32>,
|
major: Option<i32>,
|
||||||
minor: Option<i32>,
|
minor: Option<i32>,
|
||||||
patch: Option<i32>,
|
patch: Option<i32>,
|
||||||
|
checksum_matched: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl InlineCompletionEventRow {
|
impl InlineCompletionEventRow {
|
||||||
|
@ -752,6 +762,7 @@ impl InlineCompletionEventRow {
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
country_code: Option<String>,
|
country_code: Option<String>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -762,6 +773,7 @@ impl InlineCompletionEventRow {
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
|
checksum_matched,
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
os_version: body.os_version.clone().unwrap_or_default(),
|
os_version: body.os_version.clone().unwrap_or_default(),
|
||||||
|
@ -790,6 +802,7 @@ pub struct CallEventRow {
|
||||||
release_channel: String,
|
release_channel: String,
|
||||||
os_name: String,
|
os_name: String,
|
||||||
os_version: String,
|
os_version: String,
|
||||||
|
checksum_matched: bool,
|
||||||
|
|
||||||
// ClientEventBase
|
// ClientEventBase
|
||||||
installation_id: String,
|
installation_id: String,
|
||||||
|
@ -809,6 +822,7 @@ impl CallEventRow {
|
||||||
wrapper: &EventWrapper,
|
wrapper: &EventWrapper,
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -819,6 +833,7 @@ impl CallEventRow {
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
|
checksum_matched,
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
os_version: body.os_version.clone().unwrap_or_default(),
|
os_version: body.os_version.clone().unwrap_or_default(),
|
||||||
|
@ -840,6 +855,7 @@ pub struct AssistantEventRow {
|
||||||
major: Option<i32>,
|
major: Option<i32>,
|
||||||
minor: Option<i32>,
|
minor: Option<i32>,
|
||||||
patch: Option<i32>,
|
patch: Option<i32>,
|
||||||
|
checksum_matched: bool,
|
||||||
release_channel: String,
|
release_channel: String,
|
||||||
os_name: String,
|
os_name: String,
|
||||||
os_version: String,
|
os_version: String,
|
||||||
|
@ -864,6 +880,7 @@ impl AssistantEventRow {
|
||||||
wrapper: &EventWrapper,
|
wrapper: &EventWrapper,
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -874,6 +891,7 @@ impl AssistantEventRow {
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
|
checksum_matched,
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
os_version: body.os_version.clone().unwrap_or_default(),
|
os_version: body.os_version.clone().unwrap_or_default(),
|
||||||
|
@ -908,6 +926,7 @@ pub struct CpuEventRow {
|
||||||
major: Option<i32>,
|
major: Option<i32>,
|
||||||
minor: Option<i32>,
|
minor: Option<i32>,
|
||||||
patch: Option<i32>,
|
patch: Option<i32>,
|
||||||
|
checksum_matched: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CpuEventRow {
|
impl CpuEventRow {
|
||||||
|
@ -916,6 +935,7 @@ impl CpuEventRow {
|
||||||
wrapper: &EventWrapper,
|
wrapper: &EventWrapper,
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -926,6 +946,7 @@ impl CpuEventRow {
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
|
checksum_matched,
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
os_version: body.os_version.clone().unwrap_or_default(),
|
os_version: body.os_version.clone().unwrap_or_default(),
|
||||||
|
@ -946,6 +967,7 @@ pub struct MemoryEventRow {
|
||||||
major: Option<i32>,
|
major: Option<i32>,
|
||||||
minor: Option<i32>,
|
minor: Option<i32>,
|
||||||
patch: Option<i32>,
|
patch: Option<i32>,
|
||||||
|
checksum_matched: bool,
|
||||||
release_channel: String,
|
release_channel: String,
|
||||||
os_name: String,
|
os_name: String,
|
||||||
os_version: String,
|
os_version: String,
|
||||||
|
@ -967,6 +989,7 @@ impl MemoryEventRow {
|
||||||
wrapper: &EventWrapper,
|
wrapper: &EventWrapper,
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -977,6 +1000,7 @@ impl MemoryEventRow {
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
|
checksum_matched,
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
os_version: body.os_version.clone().unwrap_or_default(),
|
os_version: body.os_version.clone().unwrap_or_default(),
|
||||||
|
@ -997,6 +1021,7 @@ pub struct AppEventRow {
|
||||||
major: Option<i32>,
|
major: Option<i32>,
|
||||||
minor: Option<i32>,
|
minor: Option<i32>,
|
||||||
patch: Option<i32>,
|
patch: Option<i32>,
|
||||||
|
checksum_matched: bool,
|
||||||
release_channel: String,
|
release_channel: String,
|
||||||
os_name: String,
|
os_name: String,
|
||||||
os_version: String,
|
os_version: String,
|
||||||
|
@ -1017,6 +1042,7 @@ impl AppEventRow {
|
||||||
wrapper: &EventWrapper,
|
wrapper: &EventWrapper,
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -1027,6 +1053,7 @@ impl AppEventRow {
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
|
checksum_matched,
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
os_version: body.os_version.clone().unwrap_or_default(),
|
os_version: body.os_version.clone().unwrap_or_default(),
|
||||||
|
@ -1046,6 +1073,7 @@ pub struct SettingEventRow {
|
||||||
major: Option<i32>,
|
major: Option<i32>,
|
||||||
minor: Option<i32>,
|
minor: Option<i32>,
|
||||||
patch: Option<i32>,
|
patch: Option<i32>,
|
||||||
|
checksum_matched: bool,
|
||||||
release_channel: String,
|
release_channel: String,
|
||||||
os_name: String,
|
os_name: String,
|
||||||
os_version: String,
|
os_version: String,
|
||||||
|
@ -1066,6 +1094,7 @@ impl SettingEventRow {
|
||||||
wrapper: &EventWrapper,
|
wrapper: &EventWrapper,
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -1075,6 +1104,7 @@ impl SettingEventRow {
|
||||||
app_version: body.app_version.clone(),
|
app_version: body.app_version.clone(),
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
|
checksum_matched,
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
|
@ -1096,6 +1126,7 @@ pub struct ExtensionEventRow {
|
||||||
major: Option<i32>,
|
major: Option<i32>,
|
||||||
minor: Option<i32>,
|
minor: Option<i32>,
|
||||||
patch: Option<i32>,
|
patch: Option<i32>,
|
||||||
|
checksum_matched: bool,
|
||||||
release_channel: String,
|
release_channel: String,
|
||||||
os_name: String,
|
os_name: String,
|
||||||
os_version: String,
|
os_version: String,
|
||||||
|
@ -1121,6 +1152,7 @@ impl ExtensionEventRow {
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
extension_metadata: Option<ExtensionMetadata>,
|
extension_metadata: Option<ExtensionMetadata>,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -1131,6 +1163,7 @@ impl ExtensionEventRow {
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
|
checksum_matched,
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
os_version: body.os_version.clone().unwrap_or_default(),
|
os_version: body.os_version.clone().unwrap_or_default(),
|
||||||
|
@ -1162,6 +1195,7 @@ pub struct EditEventRow {
|
||||||
major: Option<i32>,
|
major: Option<i32>,
|
||||||
minor: Option<i32>,
|
minor: Option<i32>,
|
||||||
patch: Option<i32>,
|
patch: Option<i32>,
|
||||||
|
checksum_matched: bool,
|
||||||
release_channel: String,
|
release_channel: String,
|
||||||
os_name: String,
|
os_name: String,
|
||||||
os_version: String,
|
os_version: String,
|
||||||
|
@ -1186,6 +1220,7 @@ impl EditEventRow {
|
||||||
wrapper: &EventWrapper,
|
wrapper: &EventWrapper,
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -1199,6 +1234,7 @@ impl EditEventRow {
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
|
checksum_matched,
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
os_version: body.os_version.clone().unwrap_or_default(),
|
os_version: body.os_version.clone().unwrap_or_default(),
|
||||||
|
@ -1220,6 +1256,7 @@ pub struct ActionEventRow {
|
||||||
major: Option<i32>,
|
major: Option<i32>,
|
||||||
minor: Option<i32>,
|
minor: Option<i32>,
|
||||||
patch: Option<i32>,
|
patch: Option<i32>,
|
||||||
|
checksum_matched: bool,
|
||||||
release_channel: String,
|
release_channel: String,
|
||||||
os_name: String,
|
os_name: String,
|
||||||
os_version: String,
|
os_version: String,
|
||||||
|
@ -1242,6 +1279,7 @@ impl ActionEventRow {
|
||||||
wrapper: &EventWrapper,
|
wrapper: &EventWrapper,
|
||||||
body: &EventRequestBody,
|
body: &EventRequestBody,
|
||||||
first_event_at: chrono::DateTime<chrono::Utc>,
|
first_event_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
checksum_matched: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let semver = body.semver();
|
let semver = body.semver();
|
||||||
let time =
|
let time =
|
||||||
|
@ -1252,6 +1290,7 @@ impl ActionEventRow {
|
||||||
major: semver.map(|v| v.major() as i32),
|
major: semver.map(|v| v.major() as i32),
|
||||||
minor: semver.map(|v| v.minor() as i32),
|
minor: semver.map(|v| v.minor() as i32),
|
||||||
patch: semver.map(|v| v.patch() as i32),
|
patch: semver.map(|v| v.patch() as i32),
|
||||||
|
checksum_matched,
|
||||||
release_channel: body.release_channel.clone().unwrap_or_default(),
|
release_channel: body.release_channel.clone().unwrap_or_default(),
|
||||||
os_name: body.os_name.clone(),
|
os_name: body.os_name.clone(),
|
||||||
os_version: body.os_version.clone().unwrap_or_default(),
|
os_version: body.os_version.clone().unwrap_or_default(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue