summaryrefslogtreecommitdiffstats
path: root/java/com/rsyslog/gui/diaggui/Counters.java
blob: 363bff43930378ac4cbf59035b4d4c3dc2d0a3af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/* Display some basic rsyslogd counter variables.
 * 
 * Please note that this program requires imdiag to be loaded inside rsyslogd.
 *
 * 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.gui.diaggui;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

import com.rsyslog.lib.DiagSess;

public class Counters extends Frame {
	
	private TextField MainQItems;
	private TextField RefreshInterval;
	private Checkbox  AutoRefresh;
	private DiagSess diagSess;
	private Timer timer;

	private void createDiagSess() {
		try {
			diagSess = new DiagSess("127.0.0.1", 13500); // TODO: values from GUI
			diagSess.connect();
		}
		catch(IOException e) {
			System.out.println("Exception trying to open diag session:\n" + e.toString());
		}
	}

	private void createGUI() {
		MainQItems = new TextField();
		MainQItems.setColumns(8);
		Panel pCenter = new Panel();
		pCenter.setLayout(new FlowLayout());
		pCenter.add(new Label("MainQ Items:"));
		pCenter.add(MainQItems);
		
		RefreshInterval = new TextField();
		RefreshInterval.setColumns(5);
		RefreshInterval.setText("100");
		AutoRefresh = new Checkbox("Auto Refresh", false);
		AutoRefresh.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				setAutoRefresh();
			}
			
		});
		Button b = new Button("Refresh now");
		b.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				refreshCounters();
			}
		});
		Panel pSouth = new Panel();
		pSouth.setLayout(new FlowLayout());
		pSouth.add(AutoRefresh);
		pSouth.add(new Label("Interval (ms):"));
		pSouth.add(RefreshInterval);
		pSouth.add(b);
		
		pack();
		setTitle("rsyslogd Counters");
		setLayout(new BorderLayout());
		add(pCenter, BorderLayout.CENTER);
		add(pSouth, BorderLayout.SOUTH);
		setSize(400,500);
	}
	
	public Counters() {
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e){
				Counters.this.dispose();
			}
		});
		createGUI();
		createDiagSess();
		setAutoRefresh();
		setVisible(true);
	}


	private void startTimer() {
		timer = new Timer();
		timer.scheduleAtFixedRate(new TimerTask() {
			public void run() {
				refreshCounters();
			}
		}, 0, 100);
	}
	
	private void stopTimer() {
		if(timer != null) {
			timer.cancel();
			timer = null;
		}
	}

	/** set auto-refresh mode. It is either turned on or off, depending on the 
	 *  status of the relevant check box. */
	private void setAutoRefresh() {
		if(AutoRefresh.getState() == true) {
			startTimer();
		} else {
			stopTimer();
		}
	}
	
	/** refresh counter display from rsyslogd data. Does a network round-trip. */
	private void refreshCounters() {
		try {
			String res = diagSess.request("getmainmsgqueuesize");
			MainQItems.setText(res);
		}
		catch(IOException e) {
			System.out.println("Exception during request:\n" + e.toString());
		}
	}
}