Skip to main content

mesa_dev/client/
analytics.rs

1use crate::low_level::apis::{agent_blame_api, Error};
2use crate::models;
3
4use super::RepoClient;
5
6/// Client for analytics and AI attribution (`/{org}/{repo}/analytics`).
7#[derive(Clone, Debug)]
8pub struct AnalyticsClient<'a> {
9    pub(super) repo: &'a RepoClient<'a>,
10}
11
12impl AnalyticsClient<'_> {
13    /// Get repository analytics.
14    ///
15    /// # Errors
16    ///
17    /// Returns an error if the API request fails.
18    #[tracing::instrument(skip(self), fields(org = self.repo.org.org, repo = self.repo.repo), err(Debug))]
19    pub async fn get(
20        &self,
21        period: Option<&str>,
22    ) -> Result<
23        models::GetByOrgByRepoAnalytics200Response,
24        Error<agent_blame_api::GetByOrgByRepoAnalyticsError>,
25    > {
26        agent_blame_api::get_by_org_by_repo_analytics(
27            self.repo.org.config,
28            self.repo.org.org,
29            self.repo.repo,
30            period,
31        )
32        .await
33    }
34
35    /// Trigger a full re-aggregation of repository analytics.
36    ///
37    /// # Errors
38    ///
39    /// Returns an error if the API request fails.
40    #[tracing::instrument(skip(self), fields(org = self.repo.org.org, repo = self.repo.repo), err(Debug))]
41    pub async fn refresh(
42        &self,
43    ) -> Result<
44        models::GetByOrgByRepoAnalytics200Response,
45        Error<agent_blame_api::PostByOrgByRepoAnalyticsRefreshError>,
46    > {
47        agent_blame_api::post_by_org_by_repo_analytics_refresh(
48            self.repo.org.config,
49            self.repo.org.org,
50            self.repo.repo,
51        )
52        .await
53    }
54
55    /// Get AI attribution data between two refs.
56    ///
57    /// # Errors
58    ///
59    /// Returns an error if the API request fails.
60    #[tracing::instrument(skip(self), fields(org = self.repo.org.org, repo = self.repo.repo), err(Debug))]
61    pub async fn agentblame(
62        &self,
63        base: &str,
64        head: &str,
65    ) -> Result<
66        models::GetByOrgByRepoAgentblame200Response,
67        Error<agent_blame_api::GetByOrgByRepoAgentblameError>,
68    > {
69        agent_blame_api::get_by_org_by_repo_agentblame(
70            self.repo.org.config,
71            self.repo.org.org,
72            self.repo.repo,
73            base,
74            head,
75        )
76        .await
77    }
78}