Skip to content

Commit 17db1ae

Browse files
committed
Store endpoints on a hashset
1 parent 6e4746f commit 17db1ae

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

ddtelemetry/src/data/payloads.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright 2021-Present Datadog, Inc. https://www.datadoghq.com/
22
// SPDX-License-Identifier: Apache-2.0
33

4+
use std::hash::Hasher;
5+
46
use crate::data::metrics;
57

68
use serde::{Deserialize, Serialize};
@@ -118,14 +120,28 @@ pub enum Method {
118120
Other = 9, //This is specified as "*" in the OpenAPI spec
119121
}
120122

121-
#[derive(Serialize, Deserialize, Debug, Hash, PartialEq, Eq, Clone, Default)]
123+
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
122124
pub struct Endpoint {
123125
#[serde(default)]
124126
pub method: Option<Method>,
125127
#[serde(default)]
126128
pub path: Option<String>,
127129
pub operation_name: String,
128-
pub resource_name: String
130+
pub resource_name: String
131+
}
132+
133+
impl PartialEq for Endpoint {
134+
fn eq(&self, other: &Self) -> bool {
135+
self.resource_name == other.resource_name
136+
}
137+
}
138+
139+
impl Eq for Endpoint {}
140+
141+
impl std::hash::Hash for Endpoint {
142+
fn hash<H: Hasher>(&self, state: &mut H) {
143+
self.resource_name.hash(state);
144+
}
129145
}
130146

131147
impl Endpoint {

ddtelemetry/src/worker/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::{
1212
};
1313
use ddcommon::{hyper_migration, tag::Tag, worker::Worker};
1414

15-
use std::fmt::Debug;
15+
use std::{collections::HashSet, fmt::Debug};
1616
use std::iter::Sum;
1717
use std::ops::Add;
1818
use std::{
@@ -120,7 +120,7 @@ struct TelemetryWorkerData {
120120
dependencies: store::Store<Dependency>,
121121
configurations: store::Store<data::Configuration>,
122122
integrations: store::Store<data::Integration>,
123-
endpoints: Vec<data::Endpoint>,
123+
endpoints: HashSet<data::Endpoint>,
124124
logs: store::QueueHashMap<LogIdentifier, Log>,
125125
metric_contexts: MetricContexts,
126126
metric_buckets: MetricBuckets,
@@ -412,7 +412,7 @@ impl TelemetryWorker {
412412
AddDependency(dep) => self.data.dependencies.insert(dep),
413413
AddIntegration(integration) => self.data.integrations.insert(integration),
414414
AddConfig(cfg) => self.data.configurations.insert(cfg),
415-
AddEndpoint(endpoint) => self.data.endpoints.push(endpoint),
415+
AddEndpoint(endpoint) => { self.data.endpoints.insert(endpoint); },
416416
AddLog((identifier, log)) => {
417417
let (l, new) = self.data.logs.get_mut_or_insert(identifier, log);
418418
if !new {
@@ -1036,7 +1036,7 @@ pub struct TelemetryWorkerBuilder {
10361036
pub dependencies: store::Store<data::Dependency>,
10371037
pub integrations: store::Store<data::Integration>,
10381038
pub configurations: store::Store<data::Configuration>,
1039-
pub endpoints: Vec<data::Endpoint>,
1039+
pub endpoints: HashSet<data::Endpoint>,
10401040
pub native_deps: bool,
10411041
pub rust_shared_lib_deps: bool,
10421042
pub config: Config,
@@ -1087,7 +1087,7 @@ impl TelemetryWorkerBuilder {
10871087
dependencies: store::Store::new(MAX_ITEMS),
10881088
integrations: store::Store::new(MAX_ITEMS),
10891089
configurations: store::Store::new(MAX_ITEMS),
1090-
endpoints: Vec::new(),
1090+
endpoints: HashSet::new(),
10911091
native_deps: true,
10921092
rust_shared_lib_deps: false,
10931093
config: Config::default(),

0 commit comments

Comments
 (0)