/* 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 . * * 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()); } } }