Skip to content

Commit 27e4741

Browse files
committed
added streaming api and test cases
1 parent f94d957 commit 27e4741

File tree

7 files changed

+246
-37
lines changed

7 files changed

+246
-37
lines changed

src/main/java/org/audit4j/core/handler/file/ArchiveManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@ public void run() {
3030
public Integer extractArchiveDateCount(String datePattern) {
3131
int dateCount = 0;
3232
String[] splits = datePattern.split("d|M|y");
33-
if (splits.length>1) {
33+
if (splits.length>0) {
3434
dateCount = dateCount + Integer.valueOf(splits[0]);
3535
}
3636

3737
System.out.println(dateCount);
3838

39-
if (splits.length>2) {
39+
if (splits.length>1) {
4040
dateCount = dateCount + (Integer.valueOf(splits[1]) * 30);
4141
}
4242
System.out.println(dateCount);
4343

44-
if (splits.length>3) {
44+
if (splits.length>2) {
4545
dateCount = dateCount + (Integer.valueOf(splits[2]) * 365);
4646
}
4747
System.out.println(dateCount);
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.audit4j.core.io;
2+
3+
import org.audit4j.core.dto.AuditEvent;
4+
5+
import reactor.core.Environment;
6+
import reactor.core.composable.Deferred;
7+
import reactor.core.composable.Stream;
8+
import reactor.core.composable.spec.Streams;
9+
import reactor.function.Consumer;
10+
import reactor.function.support.Boundary;
11+
12+
public class AsyncAuditOutputStream implements AuditOutputStream {
13+
final AuditOutputStream outputStream;
14+
Deferred<AuditEvent, Stream<AuditEvent>> deferred = null;
15+
static final Environment ENV = new Environment();
16+
Boundary b = null;
17+
18+
public AsyncAuditOutputStream(final AuditOutputStream outputStream) {
19+
this.outputStream = outputStream;
20+
b = new Boundary();
21+
deferred = Streams.<AuditEvent> defer().env(ENV).dispatcher(Environment.RING_BUFFER).get();
22+
Stream<AuditEvent> stream = deferred.compose();
23+
stream.consume(b.bind(new Consumer<AuditEvent>() {
24+
@Override
25+
public void accept(AuditEvent event) {
26+
outputStream.write(event);
27+
}
28+
}));
29+
}
30+
31+
@Override
32+
public AsyncAuditOutputStream write(AuditEvent event) {
33+
deferred.accept(event);
34+
b.await();
35+
return this;
36+
}
37+
38+
@Override
39+
public void close() {
40+
ENV.shutdown();
41+
outputStream.close();
42+
}
43+
44+
@Override
45+
public Object clone() {
46+
return null;
47+
}
48+
}

src/main/java/org/audit4j/core/io/AuditEventOutputStream.java

Lines changed: 54 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,48 +19,70 @@
1919

2020
package org.audit4j.core.io;
2121

22+
import org.audit4j.core.TroubleshootManager;
23+
import org.audit4j.core.ValidationManager;
2224
import org.audit4j.core.dto.AuditEvent;
25+
import org.audit4j.core.exception.TroubleshootException;
26+
import org.audit4j.core.exception.ValidationException;
2327

2428
/**
2529
* The Class AuditEventOutputStream.
26-
*
30+
*
2731
* @author <a href="mailto:[email protected]">Janith Bandara</a>
2832
*/
2933
public class AuditEventOutputStream implements AuditOutputStream {
3034

31-
/** The output stream. */
32-
AuditOutputStream outputStream;
35+
/** The output stream. */
36+
AuditOutputStream outputStream;
37+
38+
/**
39+
* Instantiates a new audit event output stream.
40+
*
41+
* @param outputStream
42+
* the output stream
43+
*/
44+
public AuditEventOutputStream(AuditOutputStream outputStream) {
45+
this.outputStream = outputStream;
46+
}
3347

34-
/**
35-
* Instantiates a new audit event output stream.
36-
*
37-
* @param outputStream the output stream
38-
*/
39-
public AuditEventOutputStream(AuditOutputStream outputStream) {
40-
this.outputStream = outputStream;
41-
}
48+
/*
49+
* (non-Javadoc)
50+
*
51+
* @see
52+
* org.audit4j.core.io.AuditOutputStream#write(org.audit4j.core.dto.AuditEvent
53+
* )
54+
*/
55+
@Override
56+
public AuditEventOutputStream write(AuditEvent event) {
57+
try {
58+
ValidationManager.validateEvent(event);
59+
outputStream.write(event);
60+
} catch (ValidationException e) {
61+
try{
62+
TroubleshootManager.troubleshootEvent(event);
63+
outputStream.write(event);
64+
}catch(TroubleshootException e2){
65+
66+
}
67+
}
68+
69+
return this;
70+
}
4271

43-
/* (non-Javadoc)
44-
* @see org.audit4j.core.io.AuditOutputStream#write(org.audit4j.core.dto.AuditEvent)
45-
*/
46-
@Override
47-
public AuditEventOutputStream write(AuditEvent event) {
48-
outputStream.write(event);
49-
return this;
50-
}
72+
/*
73+
* (non-Javadoc)
74+
*
75+
* @see org.audit4j.core.io.AuditOutputStream#close()
76+
*/
77+
@Override
78+
public void close() {
79+
outputStream.close();
80+
outputStream = null;
81+
}
5182

52-
/* (non-Javadoc)
53-
* @see org.audit4j.core.io.AuditOutputStream#close()
54-
*/
55-
@Override
56-
public void close() {
57-
outputStream.close();
58-
outputStream = null;
59-
}
60-
61-
@Override
62-
public Object clone(){
63-
return null;
64-
}
83+
@Override
84+
public Object clone() {
85+
return null;
86+
}
6587

6688
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.audit4j.core.io;
2+
3+
import org.audit4j.core.AuditEventProcessor;
4+
import org.audit4j.core.AuditProcessor;
5+
import org.audit4j.core.Context;
6+
import org.audit4j.core.dto.AuditEvent;
7+
8+
public class AuditProcessOutputStream implements AuditOutputStream {
9+
public Context context;
10+
11+
public AuditProcessOutputStream(Context context){
12+
this.context = context;
13+
}
14+
15+
@Override
16+
public AuditProcessOutputStream write(AuditEvent event) {
17+
AuditProcessor<AuditEvent> processor = AuditEventProcessor.getInstance();
18+
processor.setConf(context.getConfig());
19+
processor.process(event);
20+
return this;
21+
}
22+
23+
@Override
24+
public void close() {
25+
26+
}
27+
28+
@Override
29+
public Object clone() {
30+
return null;
31+
}
32+
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
package org.audit4j.core;
22

3+
import org.audit4j.core.handler.file.ArchiveManagerTest;
34
import org.junit.runner.RunWith;
45
import org.junit.runners.Suite;
56
import org.junit.runners.Suite.SuiteClasses;
67

78
/**
89
* The Class Audit4jCoreTestSuit.
9-
*
10+
*
1011
* @author <a href="mailto:[email protected]">Janith Bandara</a>
1112
*/
1213
@RunWith(Suite.class)
13-
@SuiteClasses({ ValidationManagerTest.class, EncryptionUtilTest.class, TroubleshootManagerTest.class })
14+
@SuiteClasses({ ValidationManagerTest.class, EncryptionUtilTest.class, TroubleshootManagerTest.class, SmokeTest.class, ArchiveManagerTest.class })
1415
public class Audit4jCoreTestSuit {
1516

1617
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package org.audit4j.core;
2+
3+
import java.util.concurrent.TimeUnit;
4+
5+
import org.audit4j.core.dto.EventBuilder;
6+
import org.audit4j.core.io.AsyncAuditOutputStream;
7+
import org.audit4j.core.io.AuditEventOutputStream;
8+
import org.audit4j.core.io.AuditOutputStream;
9+
import org.audit4j.core.io.AuditProcessOutputStream;
10+
11+
public class LoadTest {
12+
13+
public void testEvents_Param2_Load100(){
14+
Long startTime = System.currentTimeMillis();
15+
16+
for (int i = 0; i < 100; i++) {
17+
String actor = "Dummy Actor" + i;
18+
EventBuilder builder = new EventBuilder();
19+
builder.addActor(actor).addAction("myMethod" + i).addOrigin("Origin" + i).addField("myParam1Name" + i, "param1" + i).addField("myParam2Name" + i, new Integer(1));
20+
AuditManager manager = AuditManager.getInstance();
21+
manager.audit(builder.build());
22+
}
23+
24+
Long endTime = System.currentTimeMillis();
25+
Long totalTimeInMills = endTime-startTime;
26+
System.out.println("Total Time in mills: " + totalTimeInMills);
27+
}
28+
29+
public void testEvents_Param10_Load10000(){
30+
Long startTime = System.currentTimeMillis();
31+
32+
for (int i = 0; i < 10000; i++) {
33+
String actor = "Dummy Actor" + i;
34+
EventBuilder builder = new EventBuilder();
35+
builder.addActor(actor).addAction("myMethod" + i).addOrigin("Origin" + i);
36+
for (int j = 0; j < 10; j++) {
37+
builder.addField("myParam1Name" + j + i, "param1" + j + i);
38+
}
39+
40+
AuditManager manager = AuditManager.getInstance();
41+
manager.audit(builder.build());
42+
}
43+
44+
Long endTime = System.currentTimeMillis();
45+
Long totalTimeInMills = endTime-startTime;
46+
System.out.println("Total Time in mills: " + totalTimeInMills);
47+
}
48+
49+
50+
public void testStream_Param10_Load10000(){
51+
Long startTime = System.currentTimeMillis();
52+
Context context = new Context();
53+
context.init();
54+
55+
AsyncAuditOutputStream asyncStream = new AsyncAuditOutputStream(new AuditProcessOutputStream(context));
56+
AuditOutputStream stream = new AuditEventOutputStream(asyncStream);
57+
58+
for (int i = 0; i < 10000; i++) {
59+
String actor = "Dummy Actor" + i;
60+
EventBuilder builder = new EventBuilder();
61+
builder.addActor(actor).addAction("myMethod" + i).addOrigin("Origin" + i);
62+
for (int j = 0; j < 10; j++) {
63+
builder.addField("myParam1Name" + j + i, "param1" + j + i);
64+
}
65+
66+
stream.write(builder.build());
67+
Long endTime = System.currentTimeMillis();
68+
Long totalTimeInMills = endTime-startTime;
69+
System.out.println("Total Time in mills for this: " + totalTimeInMills);
70+
71+
}
72+
73+
74+
try {
75+
TimeUnit.SECONDS.sleep(20);
76+
} catch (InterruptedException e) {
77+
// TODO Auto-generated catch block
78+
e.printStackTrace();
79+
}
80+
}
81+
82+
public static void main(String[] args) {
83+
LoadTest test = new LoadTest();
84+
test.testEvents_Param10_Load10000();
85+
}
86+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.audit4j.core;
2+
3+
import java.util.concurrent.TimeUnit;
4+
5+
import org.audit4j.core.dto.EventBuilder;
6+
import org.junit.Test;
7+
8+
public class SmokeTest {
9+
10+
@Test
11+
public void smokeTestAuditEvent() throws InterruptedException{
12+
String actor = "Dummy Actor";
13+
EventBuilder builder = new EventBuilder();
14+
builder.addActor(actor).addAction("myMethod").addOrigin("Origin1").addField("myParam1Name", "param1").addField("myParam2Name", new Integer(2));
15+
AuditManager manager = AuditManager.getInstance();
16+
manager.audit(builder.build());
17+
18+
TimeUnit.SECONDS.sleep(4);
19+
}
20+
}

0 commit comments

Comments
 (0)