Skip to content

Commit

Permalink
Fechamento da versão 1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
victoralenkar committed Oct 9, 2019
1 parent 6602eaa commit a5696cc
Show file tree
Hide file tree
Showing 13 changed files with 223 additions and 194 deletions.
41 changes: 21 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ java -jar log2prov-v1.0.jar -h
Log2Prov v1.0
Options:
-d <configuration_file>
-d <definitions_file>
-i <input_log_file>
-o <output_provn_file>
-p namespace prefix [optional]
Expand All @@ -19,10 +19,10 @@ Options:
Example...

```
java -jar log2prov-v1.0.jar -d etc\sample.conf -i mylog.log -o myprovlog.provn
java -jar log2prov-v1.0.jar -d etc\sample.conf -i etc\sample.conf -o etc\sample.provn
```

## CONF File
## Definitions File

### Structure
```
Expand Down Expand Up @@ -56,8 +56,7 @@ java -jar log2prov-v1.0.jar -d etc\sample.conf -i mylog.log -o myprovlog.provn

### AST
```
expression := ParentesisExpr
| IfThenExpr
expression := IfThenExpr
| ConcatExpr
| SubstringExpr
| ContainsExpr
Expand All @@ -70,35 +69,36 @@ expression := ParentesisExpr
| StringLiteral
| NumberLiteral
| $identifier
ParentesisExpr := (expression)
IfThenExpr := BooleanExpr ? expression : expression
| BooleanExpr ? expression
BooleanExpr := TestRegexpExpr
BooleanExpr := ParenthesisExpr
| AndExpr
| OrExpr
| ContainsExpr
| NotExpr
| TestRegexpExpr
| ContainsExpr
| true
| false
NotExpr := !BooleanExpr
ParentesisExpr := (BooleanExpr)
AndExpr := BooleanExpr && BooleanExpr
| BooleanExpr && AndExpr
OrExpr := BooleanExpr || BooleanExpr
| BooleanExpr || AndExpr
ConcatExpr := stringLiteral + stringLiteral
| stringLiteral + ConcatExpr
NotExpr := !BooleanExpr
TestRegexpExpr := testRegexp(stringLiteral, stringLiteral)
ContainsExpr := stringLiteral.contains(stringLiteral)
ConcatExpr := stringLiteral + stringLiteral
| stringLiteral + ConcatExpr
AssignExpr := identifier = expression
ReplaceExpr := stringLiteral.replace(stringLiteral, stringLiteral)
Expand All @@ -110,12 +110,13 @@ MatchExpr := stringLiteral.match(stringLiteral)
SubstringExpr := stringLiteral.substring(numberLiteral, numberLiteral)
| SubstringExpr.substring(numberLiteral, numberLiteral)
StatementExpr := actedOnBehalfOf($identifier, $identifier, -)
| wasAttributedTo($identifier, $identifier, -)
| wasDerivedFrom($identifier, $identifier, -)
| wasGeneratedBy($identifier, $identifier, -)
| used($identifier, $identifier, -)
| wasAssociatedWith($identifier, $identifier, -)
StatementExpr := actedOnBehalfOf($literal, $literal, -)
| used($literal, $literal, -)
| wasDerivedFrom($literal, $literal, -)
| wasGeneratedBy($literal, $literal, -)
| wasAssociatedWith($literal, $literal, -)
| wasAttributedTo($literal, $literal)
| wasInformedBy($literal, $literal)
identifier := [A-Za-z][A-Za-z0-9]*
Expand Down
37 changes: 0 additions & 37 deletions etc/analysis1.conf

This file was deleted.

23 changes: 0 additions & 23 deletions etc/analysis2.conf

This file was deleted.

48 changes: 20 additions & 28 deletions etc/sample.conf
Original file line number Diff line number Diff line change
@@ -1,39 +1,31 @@
[line]
testRegexp($line, "^[0-9][0-9]")
testRegexp($line, "^([0][1-9]|[1][0-2])-([0][1-9]|[1][0-9]|[2][0-9]|[3][0-1])-([1][9][0-9]{2}|[2][0-9]{3})( ([0-1][0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9])")

[tokens]
t1 = $line.match("\[(\w*\.)+\w*\]")
t2 = $t1.match("(.\w*])$")
classe = $t2.replace(".","").replace("]","")
pacote = $t1.replace("[","").replace($t2,"")
io = "io"
commIn = "commIn"
commOut = "commOut"
cpu = "cpu"
usuario = "usuario"
gravacao = "gravacao"
impressao = "impressao"
t3 = $line.match("\[ERRO\]: .*$")
erro = $line.contains("[ERRO]: ") ? $t3.replace("[ERRO]: ", "")
expiracao = $line.contains("Sessão expirada!") ? $line.match("Sessão expirada!")
preAgent = testRegexp($line, "\[AGENT\]:\s*\w*[!\.]") ? $line.match("\[AGENT\]:\s*\w*[!\.]")
ag = testRegexp($line, "\[AGENT\]:\s*\w*[!\.]") ? $preAgent.replace("[AGENT]: ", "").replace("!", "").replace(".", "")

preEntity = testRegexp($line, "\[ENTITY\]:\s*\w*[!\.]") ? $line.match("\[ENTITY\]:\s*\w*[!\.]")
et = testRegexp($line, "\[ENTITY\]:\s*\w*[!\.]") ? $preEntity.replace("[ENTITY]: ", "").replace("!", "").replace(".", "")

preActivity = testRegexp($line, "\[ACTIVITY\]:\s*\w*[!\.;]") ? $line.match("\[ACTIVITY\]:\s*\w*[!\.;]")
ac = testRegexp($line, "\[ACTIVITY\]:\s*\w*[!\.;]") ? $preActivity.replace("[ACTIVITY]: ", "").replace("!", "").replace(".", "").replace(";", "")

preInformer = testRegexp($line, "\[ACTIVITY\]:\s*\w*[!\.;]$") ? $line.match("\[ACTIVITY\]:\s*\w*[!\.;]$")
informer = testRegexp($line, "\[ACTIVITY\]:\s*\w*[!\.;]$") ? $preInformer.replace("[ACTIVITY]: ", "").replace("!", "").replace(".", "").replace(";", "")

[agents]
$usuario, $classe, $pacote
$ag

[activities]
$gravacao, $impressao, $commIn, $commOut, $cpu, $io
$ac, $informer

[entities]
$erro, $expiracao
$et

[statements]
testRegexp($line,"gravado")? wasAssociatedWith($io, $classe, -)
testRegexp($line, "InspecaoAction(.*)\[Aberta e não iniciada")? wasAssociatedWith($io, $classe, -)

$line.contains("/rs/")? wasAssociatedWith($commIn, $classe, -)
$line.contains("/servicos/")? wasAssociatedWith($commOut, $classe, -)

$line.contains("ReportHandlerAction")? wasAssociatedWith($cpu, $classe, -)
$line.contains("[CONEXAO-ID]")? actedOnBehalfOf($classe, $usuario)
$line.contains("[ERRO]: ")? wasAttributedTo($erro, $classe)
$line.contains("Sessão expirada!")? wasAttributedTo($expiracao, $classe)
testRegexp($line, "\[AGENT\].*\[ACTIVITY\]") ? wasAssociatedWith($ac, $ag, -)
testRegexp($line, "\[AGENT\].*\[ENTITY\]") ? wasAttributedTo($et, $ag)
testRegexp($line, "\[ACTIVITY\].*\[ACTIVITY\]") ? wasInformedBy($ac, $informer)
testRegexp($line, "\[ENTITY\].*\[ACTIVITY\]") ? wasGeneratedBy($et, $ac, -)
testRegexp($line, "\[ACTIVITY\].*\[ENTITY\]") ? used($ac, $et, -)
8 changes: 8 additions & 0 deletions etc/sample.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
This is a sample log file...
Only lines starting with MM-dd-yyyy HH:mm:ss will be considered according
to the definitions (sample.conf) used for this sample...

01-01-2019 00:00:01 I am [AGENT]: Agent1! doing some [ACTIVITY]: Stuff1; to some [ENTITY]: Entity1!
01-01-2019 00:00:02 That's [AGENT]: Agent2! doing some [ACTIVITY]: Stuff2; because of [ACTIVITY]: Stuff1!
01-01-2019 00:00:03 Look that! [ENTITY]: Entity2! was generated by [ACTIVITY]: Stuff2.
01-01-2019 00:00:04 Attention! [ACTIVITY]: Stuff3! used [ENTITY]: Entity2!
11 changes: 5 additions & 6 deletions src/main/java/log2prov/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public Main() {
this.activities = new ArrayList<>();
this.entities = new ArrayList<>();
this.namespacePrefix = "default";
this.namespace = "";
this.namespace = "#";
}

private void process(String definitionsFile, String inputFile, String outputFile) {
Expand All @@ -46,12 +46,10 @@ private void process(String definitionsFile, String inputFile, String outputFile
BufferedReader br = new BufferedReader(new FileReader(new File(inputFile)));
int lineNumber = 1;
fw.write("document\n");
fw.write("\n");
fw.write(this.namespacePrefix);
if (this.namespace.length() > 0) {
fw.write(" <" + this.namespace + ">\n");
} else {
fw.write("\n");
}
fw.write(" <" + this.namespace + ">\n");
fw.write("\n");
int totalLines = FileUtil.getInstance().countLines(inputFile) + 1;
try {
String line = br.readLine();
Expand All @@ -78,6 +76,7 @@ private void process(String definitionsFile, String inputFile, String outputFile
} finally {
br.close();
}
fw.write("\n");
fw.write("endDocument");
fw.close();
} catch (URISyntaxException e) {
Expand Down
25 changes: 12 additions & 13 deletions src/main/java/log2prov/language/expressions/AndExpression.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,26 +20,25 @@ public AndExpression(String expr) throws InvalidExpression {
public String parse(Map<String, Expression> tokens, String line) throws InvalidExpression {
String result = "";
try {
String[] slices = TokenUtil.getInstance().supressReserved(super.getStringExpression())
.split("\\s*&&\\s*");
if (slices.length > 0) {
String[] slices = TokenUtil.getInstance().supressReserved(super.getStringExpression()).split("\\s*&&\\s*",
2);
if (slices.length == 2) {

if (TokenUtil.getInstance().checkBooleanExpression(slices[0])) {
result = new BooleanExpression(TokenUtil.getInstance().impressReserved(slices[0])).parse(tokens, line);
result = new BooleanExpression(TokenUtil.getInstance().impressReserved(slices[0])).parse(tokens,
line);
} else {
throw new InvalidExpression("Expressão AND inválida! Expressão não booleana entre &&. Expressão: "
+ super.getStringExpression());
}

for (int i = 1; i < slices.length; i++) {
if (TokenUtil.getInstance().checkBooleanExpression(slices[i])) {
result = "" +(Boolean.parseBoolean(result)
&& Boolean.parseBoolean(new BooleanExpression(TokenUtil.getInstance().impressReserved(slices[i])).parse(tokens, line)));
} else {
throw new InvalidExpression(
"Expressão AND inválida! Expressão não booleana entre &&. Expressão: "
+ super.getStringExpression());
}
if (TokenUtil.getInstance().checkBooleanExpression(slices[1])) {
result = "" + (Boolean.parseBoolean(result) && Boolean
.parseBoolean(new BooleanExpression(TokenUtil.getInstance().impressReserved(slices[1]))
.parse(tokens, line)));
} else {
throw new InvalidExpression("Expressão AND inválida! Expressão não booleana entre &&. Expressão: "
+ super.getStringExpression());
}
}
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ public class BooleanExpression extends Expression {

public BooleanExpression(String expr) throws InvalidExpression {
super(expr);
if (!(TokenUtil.getInstance().checkAndExpression(expr) || TokenUtil.getInstance().checkOrExpression(expr)
if (!(TokenUtil.getInstance().checkParenthesisExpression(expr)
|| TokenUtil.getInstance().checkAndExpression(expr) || TokenUtil.getInstance().checkOrExpression(expr)
|| TokenUtil.getInstance().checkTestRegexp(expr) || TokenUtil.getInstance().checkContains(expr)
|| TokenUtil.getInstance().checkNotExpression(expr) || TokenUtil.getInstance().checkTrue(expr)
|| TokenUtil.getInstance().checkFalse(expr))) {
Expand All @@ -21,7 +22,9 @@ public BooleanExpression(String expr) throws InvalidExpression {
@Override
public String parse(Map<String, Expression> tokens, String line) throws InvalidExpression {
String result = "";
if (TokenUtil.getInstance().checkAndExpression(super.getStringExpression())) {
if (TokenUtil.getInstance().checkParenthesisExpression(super.getStringExpression())) {
result = new ParenthesisExpression(super.getStringExpression()).parse(tokens, line);
} else if (TokenUtil.getInstance().checkAndExpression(super.getStringExpression())) {
result = new AndExpression(super.getStringExpression()).parse(tokens, line);
} else if (TokenUtil.getInstance().checkOrExpression(super.getStringExpression())) {
result = new OrExpression(super.getStringExpression()).parse(tokens, line);
Expand Down
24 changes: 11 additions & 13 deletions src/main/java/log2prov/language/expressions/OrExpression.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,23 @@ public String parse(Map<String, Expression> tokens, String line) throws InvalidE
String result = "";
try {
String[] slices = TokenUtil.getInstance().supressReserved(super.getStringExpression())
.split("\\s*\\|\\|\\s*");
if (slices.length > 0) {

.split("\\s*\\|\\|\\s*", 2);
if (slices.length == 2) {
if (TokenUtil.getInstance().checkBooleanExpression(slices[0])) {
result = new BooleanExpression(TokenUtil.getInstance().impressReserved(slices[0])).parse(tokens, line);
result = new BooleanExpression(TokenUtil.getInstance().impressReserved(slices[0])).parse(tokens,
line);
} else {
throw new InvalidExpression("Expressão AND inválida! Expressão não booleana entre &&. Expressão: "
+ super.getStringExpression());
}

for (int i = 1; i < slices.length; i++) {
if (TokenUtil.getInstance().checkBooleanExpression(slices[i])) {
result = "" +(Boolean.parseBoolean(result)
|| Boolean.parseBoolean(new BooleanExpression(TokenUtil.getInstance().impressReserved(slices[i])).parse(tokens, line)));
} else {
throw new InvalidExpression(
"Expressão OR inválida! Expressão não booleana entre ||. Expressão: "
+ super.getStringExpression());
}
if (TokenUtil.getInstance().checkBooleanExpression(slices[0])) {
result = "" + (Boolean.parseBoolean(result) || Boolean
.parseBoolean(new BooleanExpression(TokenUtil.getInstance().impressReserved(slices[1]))
.parse(tokens, line)));
} else {
throw new InvalidExpression("Expressão OR inválida! Expressão não booleana entre ||. Expressão: "
+ super.getStringExpression());
}
}
} catch (Exception e) {
Expand Down
Loading

0 comments on commit a5696cc

Please sign in to comment.