183 个版本

0.7.31 2024 年 8 月 20 日
0.7.28 2024 年 7 月 30 日
0.7.1 2024 年 3 月 21 日
0.6.7 2023 年 12 月 14 日
0.1.24 2022 年 11 月 16 日

#397网络编程

Download history 405/week @ 2024-04-30 375/week @ 2024-05-07 801/week @ 2024-05-14 437/week @ 2024-05-21 585/week @ 2024-05-28 441/week @ 2024-06-04 1034/week @ 2024-06-11 525/week @ 2024-06-18 304/week @ 2024-06-25 330/week @ 2024-07-02 296/week @ 2024-07-09 488/week @ 2024-07-16 646/week @ 2024-07-23 471/week @ 2024-07-30 293/week @ 2024-08-06 269/week @ 2024-08-13

1,879 每月下载量
用于 divviup-cli

MPL-2.0 许可证

455KB
11K SLoC

janus_collector

Build Status latest version docs badge

janus_collector 是分布式聚合协议收集器角色的自包含实现。它旨在与 JanusDivvi Up 以及 ISRG 的隐私尊重型度量服务一起使用。 janus_collector 通过 GitHub Action 发布到 crates.io,该 Action 在创建 janus 版本时运行。


lib.rs:

DAP-PPM 收集器

该库实现了 DAP-PPM 协议的收集器角色。它与两个 DAP-PPM 聚合器服务器协同工作,在保留每个客户端数据隐私的同时,计算来自多个客户端数据的统计聚合。

示例

初始化 Collector 的实例。

use std::{fs::File, str::FromStr};

use janus_collector::{Collector, PrivateCollectorCredential};
use janus_messages::{Duration, FixedSizeQuery, Interval, Query, TaskId, Time};
use prio::vdaf::prio3::Prio3;
use url::Url;

let task_id = TaskId::from_str("[your DAP task ID here]").unwrap();

let collector_credential: PrivateCollectorCredential =
    serde_json::from_reader(File::open("[path to JSON encoded collector credential]").unwrap())
        .unwrap();

let leader_url =
    Url::from_str("[absolute URI to the DAP leader, e.g. https://leader.dap.example.com/]")
        .unwrap();

// Supply a VDAF implementation, corresponding to this task.
let vdaf = Prio3::new_count(2).unwrap();

let collector = Collector::new(
    task_id,
    leader_url,
    collector_credential.authentication_token(),
    collector_credential.hpke_keypair(),
    vdaf,
)
.unwrap();

// If this is a time interval task, specify the time interval over which the aggregation
// should be calculated.
let interval = Interval::new(
    Time::from_seconds_since_epoch(1_656_000_000),
    Duration::from_seconds(3600),
)
.unwrap();

// Make the requests and retrieve the aggregated statistic.
let aggregation_result = collector
    .collect(Query::new_time_interval(interval), &())
    .await
    .unwrap();

// Or if this is a fixed size task, make a fixed size query.
let query = Query::new_fixed_size(FixedSizeQuery::CurrentBatch);
let aggregation_result = collector.collect(query, &()).await.unwrap();

依赖项

~37–51MB
~1M SLoC