2 个版本
0.0.2 | 2024 年 6 月 30 日 |
---|---|
0.0.1 | 2024 年 6 月 30 日 |
#422 in 网页编程
308 每月下载量
71KB
1.5K SLoC
CVMFS 服务器抓取器
此库抓取 CVMFS 服务器上的公共元数据源并验证数据。获取的文件包括
- cvmfs/info/v1/repositories.json
- cvmfs/info/v1/meta.json
对于每个存储库,它还会获取
- cvmfs/
/.cvmfs_status.json - cvmfs/
/.cvmfspublished
用法
use cvmfs_server_scraper::{Hostname, Server, ServerBackendType, ServerType, scrape_servers, ScrapedServer};
use futures::future::join_all;
#[tokio::main]
async fn main() {
let servers = vec![
Server::new(
ServerType::Stratum1,
ServerBackendType::CVMFS,
Hostname("azure-us-east-s1.eessi.science".to_string()),
),
Server::new(
ServerType::Stratum1,
ServerBackendType::AutoDetect,
Hostname("aws-eu-central-s1.eessi.science".to_string()),
),
Server::new(
ServerType::SyncServer,
ServerBackendType::S3,
Hostname("aws-eu-west-s1-sync.eessi.science".to_string()),
),
];
let repolist = vec!["software.eessi.io", "dev.eessi.io", "riscv.eessi.io"];
// Scrape all servers in parallel
let servers = scrape_servers(servers, repolist).await;
for server in servers {
match server {
ScrapedServer::Populated(populated_server) => {
println!("{}", populated_server);
populated_server.display();
println!();
}
ScrapedServer::Failed(failed_server) => {
panic!("Error! {} failed scraping: {:?}", failed_server.hostname, failed_server.error);
}
}
}
}
关于服务器后端的一些说明
对于给定的服务器,有三种有效的后端选项。这些是
CVMFS
:此后端需要服务器上存在cvmfs/info/v1/repositories.json
。如果缺少该文件,抓取将失败。S3
:甚至不会尝试获取cvmfs/info/v1/repositories.json
。请注意,如果任何服务器使用 S3 作为后端,则必须将存储库列表传递给抓取器,因为目前没有其他方法可以确定 S3 服务器的存储库列表。由于所有服务器都进行异步抓取,因此目前不支持从其他服务器类型(包括可能的 Stratum0)检测到的存储库回退。AutoDetect
:此后端尝试获取cvmfs/info/v1/repositories.json
,但如果缺少该文件,则不会失败。如果抓取器无法获取文件,则假定后端为 S3。如果存储库列表为空,抓取器将返回空列表。如果您的 S3 服务器没有存储库,将后端设置为 AutoDetect 将允许抓取器继续而不会失败。
对于已填充的服务器,字段 backend_detected
将设置为检测到的后端,对于显式 S3 或 CVMFS 服务器,它将与请求的类型相同。
抓取哪些存储库?
- 对于设置为或检测为 CVMFS 的服务器,抓取器将抓取检测到的和明确声明的配置存储库的并集。
- 对于设置为或检测为 S3 的服务器,只抓取明确声明的存储库(如果服务器类型明确设置为 S3 且没有传递存储库,则抓取器将失败)。
许可证
在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE 文件。
依赖项
~7–19MB
~267K SLoC