first version
This commit is contained in:
parent
2dad6de1e8
commit
85a656f417
1
.gitignore
vendored
1
.gitignore
vendored
@ -62,3 +62,4 @@
|
|||||||
# Debug files
|
# Debug files
|
||||||
*.dSYM/
|
*.dSYM/
|
||||||
|
|
||||||
|
build
|
10
CMakeLists.txt
Normal file
10
CMakeLists.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.6)
|
||||||
|
project(journey)
|
||||||
|
|
||||||
|
find_package(PkgConfig)
|
||||||
|
pkg_check_modules(LIBSYSTEMD REQUIRED libsystemd)
|
||||||
|
pkg_check_modules(RE2 REQUIRED re2)
|
||||||
|
|
||||||
|
add_executable(journey main.cpp)
|
||||||
|
target_link_libraries(journey ${LIBSYSTEMD_LIBRARIES} ${RE2_LIBRARIES})
|
||||||
|
install(TARGETS journey RUNTIME DESTINATION bin)
|
132
main.cpp
Normal file
132
main.cpp
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
#include <cstdio>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <systemd/sd-journal.h>
|
||||||
|
#include "re2/re2.h"
|
||||||
|
|
||||||
|
using namespace re2;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// ideas: sort by usage
|
||||||
|
// configurable regex engine: http://sljit.sourceforge.net/regex_perf.html
|
||||||
|
|
||||||
|
void save_cursor(sd_journal* j, const char* filename) {
|
||||||
|
char* cursor;
|
||||||
|
//sd_journal_seek_tail(j);
|
||||||
|
int r = sd_journal_get_cursor(j, &cursor);
|
||||||
|
|
||||||
|
if (r >= 0) {
|
||||||
|
cout << cursor << endl;
|
||||||
|
FILE* f = fopen(filename, "wb");
|
||||||
|
|
||||||
|
if (f) {
|
||||||
|
fwrite(cursor, sizeof(char), strlen(cursor), f);
|
||||||
|
free(cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
} else {
|
||||||
|
cerr << "Failed to get cursor: " << strerror(-r) << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void seek_cursor(sd_journal* j, const char* filename) {
|
||||||
|
FILE* f = fopen(filename, "rb");
|
||||||
|
|
||||||
|
if (f) {
|
||||||
|
fseek(f, 0, SEEK_END);
|
||||||
|
long int s = ftell(f);
|
||||||
|
|
||||||
|
if (s > 0) {
|
||||||
|
fseek(f, 0, SEEK_SET);
|
||||||
|
char* c = (char*)malloc(s);
|
||||||
|
|
||||||
|
size_t r = fread(c, s, 1, f);
|
||||||
|
if (r == 1) {
|
||||||
|
cout << c << endl;
|
||||||
|
sd_journal_seek_cursor(j, c);
|
||||||
|
} else {
|
||||||
|
cerr << "only " << r << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(c);
|
||||||
|
} else {
|
||||||
|
cerr << "empty file" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Failed to open load cursor\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
|
// read rules
|
||||||
|
ifstream in("test.rules");
|
||||||
|
string line;
|
||||||
|
RE2 re1("^\\w\\{3\\} \\[ :0-9\\]\\{11\\} \\[._\\[:alnum:\\]-\\]\\+ (.*)\\[\\[0-9\\]+\\]: (.*)$");
|
||||||
|
|
||||||
|
while (getline(in, line).good()) {
|
||||||
|
//cout << line << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int r;
|
||||||
|
sd_journal* j;
|
||||||
|
|
||||||
|
r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
|
||||||
|
|
||||||
|
if (r < 0) {
|
||||||
|
fprintf(stderr, "Failed to open journal: %s\n", strerror(-r));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
seek_cursor(j, "last");
|
||||||
|
// skip current
|
||||||
|
sd_journal_next(j);
|
||||||
|
|
||||||
|
RE2 re(".*pixmap$");
|
||||||
|
|
||||||
|
if (!re.ok()) {
|
||||||
|
printf("pattern error!\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while (sd_journal_next(j) > 0) {
|
||||||
|
const char* d;
|
||||||
|
size_t l;
|
||||||
|
|
||||||
|
r = sd_journal_get_data(j, "MESSAGE", (const void**)&d, &l);
|
||||||
|
|
||||||
|
if (r < 0) {
|
||||||
|
fprintf(stderr, "Failed to read message field: %s\n", strerror(-r));
|
||||||
|
continue;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
re2::StringPiece input(d, l);
|
||||||
|
|
||||||
|
//if (RE2::FullMatch(input, re)) {
|
||||||
|
// printf("match: %d %d @%d\n", result.data() - subject, result.size(), input.data() - subject);
|
||||||
|
printf("%.*s\n", (int) l, d);
|
||||||
|
//}
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
//sd_journal_previous(j);
|
||||||
|
save_cursor(j, "last");
|
||||||
|
|
||||||
|
sd_journal_close(j);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user