#changelog #gluster #parser #tool #mkdir #lib

bin+lib glusterchangelog

用于解析Gluster更改日志的库和工具

1 个不稳定版本

使用旧的Rust 2015

0.1.2 2016年4月4日

文件系统中排名1568

MIT许可证

15KB
296

glusterchangelog

Build Status

使用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文件。

无运行时依赖项