1 个不稳定版本
使用旧的Rust 2015
0.1.2 | 2016年4月4日 |
---|
在文件系统中排名1568
15KB
296 行
glusterchangelog
使用Rust编写的GlusterFS更改日志解析器。
为什么?
将此格式
GlusterFS Changelog | version: v1.1 | encoding : 2
E0b99ef11-4b79-4cd0-9730-b5a0e8c4a8c0^@4^@16877^@0^@0^@00000000-00
00-0000-0000-000000000001/dir1^@Ec5250af6-720e-4bfe-b938-827614304
f39^@23^@33188^@0^@0^@0b99ef11-4b79-4cd0-9730-b5a0e8c4a8c0/hello.t
xt^@Dc5250af6-720e-4bfe-b938-827614304f39^@Dc5250af6-720e-4bfe-b93
8-827614304f39^@
转换为可读格式 :)
E 0b99ef11-4b79-4cd0-9730-b5a0e8c4a8c0 MKDIR 16877 0 0 \
00000000-0000-0000-0000-000000000001/dir1
E c5250af6-720e-4bfe-b938-827614304f39 CREATE 33188 0 0 \
0b99ef11-4b79-4cd0-9730-b5a0e8c4a8c0/hello.txt
D c5250af6-720e-4bfe-b938-827614304f39
D c5250af6-720e-4bfe-b938-827614304f39
安装
克隆GitHub仓库,并在您的系统上编译。
git clone https://github.com/aravindavk/glusterchangelog.git
cd glusterchangelog
cargo build --release
然后将创建在target/release
目录中的二进制文件glusterchangelogparser
复制到/usr/local/bin
(或PATH环境变量中可用的任何其他目录)
作为工具使用
例如,brick1相关的更改日志位于/bricks/brick1/.glusterfs/changelogs/
,要使用glusterchangelogparser,
glusterchangelogparser /bricks/brick1/.glusterfs/changelogs/CHANGELOG.1410542281
要解析并显示brick中所有更改日志的内容,创建一个名为all_changes.sh
的脚本
#!/bin/bash
# filename: all_changes.sh
BRICK_ROOT=$1;
for cf in `ls ${BRICK_ROOT}/.glusterfs/changelogs/CHANGELOG.*`
do
glusterchangelogparser $cf
done;
运行
./all_changes.sh /bricks/brick1
要查看特定GFID(每个文件/目录的GlusterFS ID)发生的事件,
./all_changes.sh /bricks/brick1 | grep "7db2b971-7516-40bb-b069-90c875960b0a"
作为库使用
首先,将以下内容添加到您的Cargo.toml
[dependencies]
glusterchangelog = "0.1.2"
将以下内容添加到您的代码中,
extern crate glusterchangelog;
use glusterchangelog::Record;
创建一个接受glusterchangelog::Record
作为输入的回调函数
fn parse_record(record: &Record) {
match record.fop_type{
"D" => println!("{} D {}", record.ts, record.gfid),
"M" => println!("{} M {} {}", record.ts, record.gfid, record.fop),
"E" => {
match record.fop{
"MKNOD" | "MKDIR" | "CREATE" => println!("{} E {} {} {} {} {} {}",
record.ts,
record.gfid,
record.fop,
record.path,
record.mode,
record.uid,
record.gid),
"LINK" | "SYMLINK" => println!("{} E {} {} {}",
record.ts,
record.gfid,
record.fop,
record.path),
"UNLINK" | "RMDIR" => println!("{} E {} {} {} {}",
record.ts,
record.gfid,
record.fop,
record.path,
record.fullpath),
"RENAME" => println!("{} E {} {} {} {}",
record.ts,
record.gfid,
record.fop,
record.path1,
record.path2),
_ => {}
}
},
_ => {}
}
}
调用解析器,
fn main(){
let filename = env::args().nth(1).unwrap();
match glusterchangelog::parse(filename, parse_record){
Err(e) => println!("Error: {}", e),
_ => {}
}
}
许可证
MIT许可证(MIT)。有关更多详细信息,请参阅LICENSE文件。