From e8d27c8f5a01d3a77ff73cade12008d6411ab52b Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Mon, 31 Aug 2009 14:37:26 +0200 Subject: now supports sending UDP messages via multiple threads --- java/Makefile.am | 1 + java/com/rsyslog/gui/msggen/MsgGen.java | 27 +++++--- java/com/rsyslog/lib/SyslogTrafficGenerator.java | 81 ++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 java/com/rsyslog/lib/SyslogTrafficGenerator.java diff --git a/java/Makefile.am b/java/Makefile.am index 5d3cd1b0..67f5eb43 100644 --- a/java/Makefile.am +++ b/java/Makefile.am @@ -19,6 +19,7 @@ JAVA_SOURCE_FILES = \ com/rsyslog/lib/DiagSess.java \ com/rsyslog/lib/SyslogMessage.java \ com/rsyslog/lib/SyslogMsgConsumer.java \ + com/rsyslog/lib/SyslogTrafficGenerator.java \ com/rsyslog/lib/SyslogSender.java \ com/rsyslog/lib/UDPSyslogSender.java \ com/rsyslog/diag/DiagTalker.java \ diff --git a/java/com/rsyslog/gui/msggen/MsgGen.java b/java/com/rsyslog/gui/msggen/MsgGen.java index 6591d401..0df22c8d 100644 --- a/java/com/rsyslog/gui/msggen/MsgGen.java +++ b/java/com/rsyslog/gui/msggen/MsgGen.java @@ -37,6 +37,8 @@ import javax.swing.*; public class MsgGen extends Frame { private TextField target; private TextField message; + private TextField nummsgs; + private TextField numthrds; public static void main(String args[]) { new MsgGen(); @@ -66,15 +68,23 @@ public class MsgGen extends Frame { /** creates the main GUI */ private void createGUI() { - target = new TextField("127.0.0.1", 32); + //target = new TextField("127.0.0.1", 32); + target = new TextField("172.19.3.3", 32); message = new TextField(80); - message.setText("<161>Test malformed"); + //message.setText("<161>Test malformed"); + message.setText("<5>iaalog[171652]: AIB|dcu|2009/08/12 14:48:43|mfa challenge|NNNNNNN|XX.XX.XX.XX"); + nummsgs = new TextField("1000", 8); + numthrds = new TextField("10", 5); Panel pCenter = new Panel(); pCenter.setLayout(new FlowLayout()); pCenter.add(new Label("Target Host:")); pCenter.add(target); + pCenter.add(new Label("Number of Msgs:")); + pCenter.add(nummsgs); pCenter.add(new Label("Msg:")); pCenter.add(message); + pCenter.add(new Label("Number of Threads:")); + pCenter.add(numthrds); Button b = new Button("Start Test"); b.addActionListener(new ActionListener() { @@ -96,14 +106,11 @@ public class MsgGen extends Frame { /** perform the test, a potentially complex operation */ private void performTest() { - try { - UDPSyslogSender sender = new UDPSyslogSender(target.getText()); - for(int i = 0 ; i < 100 ; ++i) - sender.sendMSG(message.getText()); - } - catch(Exception e) { - JOptionPane.showMessageDialog(this, e.toString(), "Error", - JOptionPane.ERROR_MESSAGE, null); + for(short i = 0 ; i < Integer.parseInt(numthrds.getText()) ; ++ i) { + SyslogTrafficGenerator gen = + new SyslogTrafficGenerator(target.getText(), message.getText(), + Long.parseLong(nummsgs.getText())); + gen.start(); } } diff --git a/java/com/rsyslog/lib/SyslogTrafficGenerator.java b/java/com/rsyslog/lib/SyslogTrafficGenerator.java new file mode 100644 index 00000000..79a99495 --- /dev/null +++ b/java/com/rsyslog/lib/SyslogTrafficGenerator.java @@ -0,0 +1,81 @@ +/** + * This class is a syslog traffic generator. It is primarily intended to be used + * together with testing tools, but may have some use cases outside that domain. + * + * @author Rainer Gerhards + * + * Copyright 2009 Rainer Gerhards and Adiscon GmbH. + * + * This file is part of rsyslog. + * + * Rsyslog is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Rsyslog is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Rsyslog. If not, see http://www.gnu.org/licenses/. + * + * A copy of the GPL can be found in the file "COPYING" in this distribution. + */ +package com.rsyslog.lib; + +public class SyslogTrafficGenerator extends Thread { + + /** the target host to receive traffic */ + private String target; + + /** the message (template) to be sent */ + private String message; + + /** number of messages to be sent */ + private long nummsgs; + + /** Constructs Sender, sets target system. + * @param target the system to connect to. Syntax of target is depending + * on the underlying transport. + */ + public SyslogTrafficGenerator(String target, String message, long nummsgs) { + this.target = target; + this.message = message; + this.nummsgs = nummsgs; + } + + /** Generates the traffic. Stops when either called to terminate + * or the max number of messages have been sent. Note that all + * necessary properties must have been set up before starting the + * generator thread! + */ + private void performTest() throws Exception { + int doDisp = 0; + UDPSyslogSender sender = new UDPSyslogSender(target); + for(long i = 0 ; i < nummsgs ; ++i) { + sender.sendMSG(message + " " + Long.toString(i) + " " + this.toString() + "\0"); + if((doDisp++ % 1000) == 0) + System.out.println(this.toString() + " send message " + Long.toString(i)); + sleep(1); + } + } + + +/** Wrapper around the real traffic generator, catches exceptions. + */ + public void run() { + System.out.println("traffic generator " + this.toString() + " thread started"); + try { + performTest(); + } + catch(Exception e) { + /* at some time, we may find a more intelligent way to + * handle this! ;) + */ + System.out.println(e.toString()); + } + System.out.println("traffic generator " + this.toString() + " thread finished"); + } +} -- cgit