package net.rizon.moo.plugin.dnsblstats;
+import com.google.inject.Inject;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.Set;
import net.rizon.moo.Command;
import net.rizon.moo.CommandSource;
-import net.rizon.moo.Moo;
-import net.rizon.moo.Plugin;
-import net.rizon.moo.Server;
+import net.rizon.moo.conf.Config;
+import net.rizon.moo.irc.Protocol;
+import net.rizon.moo.irc.Server;
+import net.rizon.moo.irc.ServerManager;
+import net.rizon.moo.plugin.dnsblstats.comparators.CountComparator;
+import net.rizon.moo.plugin.dnsblstats.comparators.ServerComparator;
class CommandDnsblStats extends Command
{
- private static HashSet<String> command_waiting_on = new HashSet<String>();
+ private static Set<String> command_waiting_on = new HashSet<>();
private static CommandSource command_source;
private static boolean do_server_counts;
private static String do_server_name;
- public CommandDnsblStats(Plugin pkg)
+ @Inject
+ private ServerManager serverManager;
+
+ @Inject
+ private Protocol protocol;
+
+ @Inject
+ private dnsblstats dnsblstats;
+
+ @Inject
+ private CountComparator countComparator;
+
+ @Inject
+ private ServerComparator serverComparator;
+
+ @Inject
+ public CommandDnsblStats(Config conf)
{
- super(pkg, "!DNSBLSTATS", "Views DNSBL counts");
+ super("!DNSBLSTATS", "Views DNSBL counts");
- this.requiresChannel(Moo.conf.staff_channels);
- this.requiresChannel(Moo.conf.oper_channels);
- this.requiresChannel(Moo.conf.admin_channels);
+ this.requiresChannel(conf.staff_channels);
+ this.requiresChannel(conf.oper_channels);
+ this.requiresChannel(conf.admin_channels);
}
@Override
do_server_name = params[2];
}
- for (Server s : Server.getServers())
+ for (Server s : serverManager.getServers())
if (s.isNormal() && !s.isHub())
{
- Moo.write("STATS", "B", s.getName());
+ protocol.write("STATS", "B", s.getName());
command_waiting_on.add(s.getName());
}
}
- static void checkReply(String source)
+ void checkReply(String source)
{
command_waiting_on.remove(source);
if (command_waiting_on.isEmpty() && command_source != null)
{
if (CommandDnsblStats.do_server_name != null)
{
- Server s = Server.findServer(do_server_name);
+ Server s = serverManager.findServer(do_server_name);
if (s == null)
command_source.reply("No servers found for " + do_server_name);
else
String[] dnsbl_names = new String[info.hits.size()];
info.hits.keySet().toArray(dnsbl_names);
- dnsblCountComparator.counts = info.hits;
- Arrays.sort(dnsbl_names, dnsblCountComparator.cmp);
+ countComparator.counts = info.hits;
+ Arrays.sort(dnsbl_names, countComparator);
for (int i = dnsbl_names.length; i > 0; --i)
{
else if (CommandDnsblStats.do_server_counts)
{
long total = 0;
- for (Server s : Server.getServers())
+ for (Server s : serverManager.getServers())
total += dnsblstats.getDnsblInfoFor(s).getTotal();
command_source.reply("DNSBL counts by server (" + total + "):");
- Server servers[] = Server.getServers();
- Arrays.sort(servers, dnsblServerComparator.cmp);
+ Server servers[] = serverManager.getServers();
+ Arrays.sort(servers, serverComparator);
for (int i = servers.length; i > 0; --i)
{
{
HashMap<String, Long> dnsbl_counts = new HashMap<String, Long>();
long total = 0;
- for (Server s : Server.getServers())
+ for (Server s : serverManager.getServers())
{
DnsblInfo info = dnsblstats.getDnsblInfoFor(s);
total += info.getTotal();
String[] dnsbl_names = new String[dnsbl_counts.size()];
dnsbl_counts.keySet().toArray(dnsbl_names);
- dnsblCountComparator.counts = dnsbl_counts;
- Arrays.sort(dnsbl_names, dnsblCountComparator.cmp);
+ countComparator.counts = dnsbl_counts;
+ Arrays.sort(dnsbl_names, countComparator);
for (int i = dnsbl_names.length; i > 0; --i)
{
+++ /dev/null
-package net.rizon.moo.plugin.dnsblstats;
-
-import java.util.Comparator;
-import java.util.HashMap;
-
-import net.rizon.moo.Server;
-
-class dnsblServerComparator implements Comparator<Server>
-{
- public static dnsblServerComparator cmp = new dnsblServerComparator();
-
- @Override
- public int compare(Server arg0, Server arg1)
- {
- DnsblInfo i0 = dnsblstats.getDnsblInfoFor(arg0), i1 = dnsblstats.getDnsblInfoFor(arg1);
- long val0 = i0 != null ? i0.getTotal() : 0, val1 = i1 != null ? i1.getTotal() : 0;
- if (val0 < val1)
- return -1;
- else if (val0 > val1)
- return 1;
- else
- return 0;
- }
-}
-
-class dnsblCountComparator implements Comparator<String>
-{
- public static dnsblCountComparator cmp = new dnsblCountComparator();
- public static HashMap<String, Long> counts = null;
-
- @Override
- public int compare(String arg0, String arg1)
- {
- long val0 = counts.get(arg0), val1 = counts.get(arg1);
- if (val0 < val1)
- return -1;
- else if (val0 > val1)
- return 1;
- else
- return 0;
- }
-}
package net.rizon.moo.plugin.dnsblstats;
import java.util.HashMap;
+import java.util.Map;
-class DnsblInfo
+public class DnsblInfo
{
- public HashMap<String, Long> hits = new HashMap<String, Long>();
+ public Map<String, Long> hits = new HashMap<>();
public long getTotal()
{
package net.rizon.moo.plugin.dnsblstats;
+import com.google.inject.Inject;
import net.rizon.moo.Message;
+import net.rizon.moo.io.IRCMessage;
// End of stats
class Numeric219 extends Message
{
+ @Inject
+ private CommandDnsblStats stats;
+
+ @Inject
+ private StatsRequester requester;
+
Numeric219()
{
super("219");
}
@Override
- public void run(String source, String[] message)
+ public void run(IRCMessage message)
{
- if (message[1].equals("B") == false)
+ if (message.getParams()[1].equals("B") == false)
return;
- CommandDnsblStats.checkReply(source);
- StatsRequester.checkWarn(source);
+ stats.checkReply(message.getSource());
+ requester.checkWarn(message.getSource());
}
}
package net.rizon.moo.plugin.dnsblstats;
+import com.google.inject.Inject;
import net.rizon.moo.Message;
-import net.rizon.moo.Server;
+import net.rizon.moo.io.IRCMessage;
+import net.rizon.moo.irc.Server;
+import net.rizon.moo.irc.ServerManager;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/* /stats b */
class Numeric227 extends Message
{
- private static final Logger logger = LoggerFactory.getLogger(Numeric227.class);
+ @Inject
+ private static Logger logger;
+
+ @Inject
+ private ServerManager serverManager;
+
+ @Inject
+ private dnsblstats dnsblstats;
public Numeric227()
{
}
@Override
- public void run(String source, String[] message)
+ public void run(IRCMessage message)
{
- if (message.length < 4)
+ if (message.getParams().length < 4)
return;
- final String name = message[2];
+ final String name = message.getParams()[2];
long count;
try
{
- count = Long.parseLong(message[3]);
+ count = Long.parseLong(message.getParams()[3]);
}
catch (Exception ex)
{
return;
}
- Server s = Server.findServer(source);
+ Server s = serverManager.findServer(message.getSource());
if (s == null)
- s = new Server(source);
+ {
+ s = new Server(message.getSource());
+ serverManager.insertServer(s);
+ }
DnsblInfo info = dnsblstats.getDnsblInfoFor(s);
info.hits.put(name, count);
package net.rizon.moo.plugin.dnsblstats;
-import java.util.Date;
+import com.google.inject.Inject;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import net.rizon.moo.conf.Config;
+import net.rizon.moo.irc.Protocol;
+import net.rizon.moo.irc.Server;
+import net.rizon.moo.irc.ServerManager;
-import net.rizon.moo.Moo;
-import net.rizon.moo.Server;
class StatsRequester implements Runnable
{
private static boolean check_requested;
private static boolean first_run = true;
- private static HashSet<String> requested = new HashSet<String>(), check_waiting_on = new HashSet<String>();
+ private static Set<String> requested = new HashSet<>(), check_waiting_on = new HashSet<>();
private static long before_total_count;
- private static HashMap<String, Long> before_count = new HashMap<String, Long>();
+ private static Map<String, Long> before_count = new HashMap<>();
+
+ @Inject
+ private ServerManager serverManager;
+
+ @Inject
+ private Protocol protocol;
+
+ @Inject
+ private dnsblstats dnsblstats;
+
+ @Inject
+ private Config config;
@Override
public void run()
before_total_count = 0;
before_count.clear();
- for (Server s : Server.getServers())
+ for (Server s : serverManager.getServers())
if (s.isNormal() && !s.isHub())
{
- Moo.write("STATS", "B", s.getName());
+ protocol.write("STATS", "B", s.getName());
requested.add(s.getName());
check_waiting_on.add(s.getName());
private static final long global_threshold = 50;
private static final long server_threshold = 20;
- static void checkWarn(String source)
+ void checkWarn(String source)
{
check_waiting_on.remove(source);
for (String ss : requested)
{
- Server s = Server.findServerAbsolute(ss);
+ Server s = serverManager.findServerAbsolute(ss);
if (s != null && s.getSplit() == null && !s.isServices())
{
long count = dnsblstats.getDnsblInfoFor(s).getTotal();
for (Iterator<String> it = before_count.keySet().iterator(); it.hasNext();)
{
- Server s = Server.findServerAbsolute(it.next());
+ Server s = serverManager.findServerAbsolute(it.next());
if (s == null)
continue;
}
if (!dnsbl_message.isEmpty() && !first_run)
- Moo.privmsgAll(Moo.conf.oper_channels, dnsbl_message);
+ protocol.privmsgAll(config.oper_channels, dnsbl_message);
first_run = false;
check_requested = false;
--- /dev/null
+package net.rizon.moo.plugin.dnsblstats.comparators;
+
+import java.util.Comparator;
+import java.util.Map;
+
+public class CountComparator implements Comparator<String>
+{
+ public static Map<String, Long> counts = null;
+
+ @Override
+ public int compare(String arg0, String arg1)
+ {
+ long val0 = counts.get(arg0), val1 = counts.get(arg1);
+ if (val0 < val1)
+ return -1;
+ else if (val0 > val1)
+ return 1;
+ else
+ return 0;
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.rizon.moo.plugin.dnsblstats.comparators;
+
+import com.google.inject.Inject;
+import java.util.Comparator;
+import net.rizon.moo.irc.Server;
+import net.rizon.moo.plugin.dnsblstats.DnsblInfo;
+import net.rizon.moo.plugin.dnsblstats.dnsblstats;
+
+public class ServerComparator implements Comparator<Server>
+{
+ @Inject
+ private dnsblstats dnsblstats;
+
+ @Override
+ public int compare(Server arg0, Server arg1)
+ {
+ DnsblInfo i0 = dnsblstats.getDnsblInfoFor(arg0), i1 = dnsblstats.getDnsblInfoFor(arg1);
+ long val0 = i0 != null ? i0.getTotal() : 0, val1 = i1 != null ? i1.getTotal() : 0;
+ if (val0 < val1)
+ return -1;
+ else if (val0 > val1)
+ return 1;
+ else
+ return 0;
+ }
+}
\ No newline at end of file
package net.rizon.moo.plugin.dnsblstats;
import com.google.common.eventbus.Subscribe;
+import com.google.inject.Inject;
+import com.google.inject.multibindings.Multibinder;
import io.netty.util.concurrent.ScheduledFuture;
+import java.util.Arrays;
+import java.util.EventListener;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.concurrent.TimeUnit;
import net.rizon.moo.Command;
-import net.rizon.moo.Event;
import net.rizon.moo.Message;
import net.rizon.moo.Moo;
import net.rizon.moo.Plugin;
-import net.rizon.moo.Server;
import net.rizon.moo.events.OnConnect;
import net.rizon.moo.events.OnServerDestroy;
import net.rizon.moo.events.OnServerLink;
+import net.rizon.moo.irc.Protocol;
+import net.rizon.moo.irc.Server;
+import net.rizon.moo.irc.ServerManager;
+import net.rizon.moo.plugin.dnsblstats.comparators.CountComparator;
+import net.rizon.moo.plugin.dnsblstats.comparators.ServerComparator;
-public class dnsblstats extends Plugin
+public class dnsblstats extends Plugin implements EventListener
{
- private Command dnsbl;
- private ScheduledFuture requester;
+ @Inject
+ private CommandDnsblStats dnsbl;
+
+ @Inject
+ private ServerManager serverManager;
+
+ @Inject
+ private Protocol protocol;
+
+ @Inject
+ private StatsRequester requester;
+
+ private ScheduledFuture requesterFuture;
private Message n219, n227;
- static HashMap<Server, DnsblInfo> infos = new HashMap<Server, DnsblInfo>();
+ private Map<Server, DnsblInfo> infos = new HashMap<>();
public dnsblstats()
{
@Override
public void start() throws Exception
{
- dnsbl = new CommandDnsblStats(this);
- requester = Moo.scheduleWithFixedDelay(new StatsRequester(), 1, TimeUnit.MINUTES);
- n219 = new Numeric219();
- n227 = new Numeric227();
- Moo.getEventBus().register(this);
+ requesterFuture = Moo.scheduleWithFixedDelay(requester, 1, TimeUnit.MINUTES);
}
@Override
public void stop()
{
- dnsbl.remove();
- requester.cancel(false);
- n219.remove();
- n227.remove();
- Moo.getEventBus().unregister(this);
+ requesterFuture.cancel(false);
}
- static DnsblInfo getDnsblInfoFor(Server s)
+ public DnsblInfo getDnsblInfoFor(Server s)
{
DnsblInfo i = infos.get(s);
if (i == null)
@Subscribe
public void onConnect(OnConnect evt)
{
- for (Server s : Server.getServers())
- Moo.write("STATS", "B", s.getName());
+ for (Server s : serverManager.getServers())
+ protocol.write("STATS", "B", s.getName());
}
@Subscribe
Server serv = evt.getServer();
/* Be sure dnsbl stats are up to date, prevents long splits from tripping the dnsbl monitor */
- Moo.write("STATS", "B", serv.getName());
+ protocol.write("STATS", "B", serv.getName());
}
@Subscribe
{
Server serv = evt.getServer();
- dnsblstats.infos.remove(serv);
+ infos.remove(serv);
+ }
+
+ @Override
+ public List<Command> getCommands()
+ {
+ return Arrays.<Command>asList(dnsbl);
+ }
+
+ @Override
+ protected void configure()
+ {
+ bind(dnsblstats.class).toInstance(this);
+
+ bind(StatsRequester.class);
+
+ bind(Numeric219.class);
+ bind(Numeric227.class);
+
+ bind(CountComparator.class);
+ bind(ServerComparator.class);
+
+ Multibinder<Command> commandBinder = Multibinder.newSetBinder(binder(), Command.class);
+ commandBinder.addBinding().to(CommandDnsblStats.class);
+
+ Multibinder<EventListener> eventListenerBinder = Multibinder.newSetBinder(binder(), EventListener.class);
+ eventListenerBinder.addBinding().toInstance(this);
}
}
logger.info("moo v{} starting up", Version.getFullVersion());
- this.rebuildInjector();
+ buildInjector();
eventManager.build();
return moo.group.schedule(r, t, unit);
}
- public void rebuildInjector()
+ private void buildInjector()
{
- for (Plugin p : Plugin.getPlugins())
- p.stop();
-
List<Module> modules = new ArrayList<>();
modules.add(new MooModule(this));
logger.warn("unable to start plugin " + p.getName(), ex);
}
}
+
+ public void rebuildInjector()
+ {
+ for (Plugin p : Plugin.getPlugins())
+ p.stop();
+
+ buildInjector();
+ }
}
<module>commits</module>
<module>core</module>
<module>dnsbl</module>
-<!-- <module>dnsblstats</module>-->
+ <module>dnsblstats</module>
<module>fun</module>
<!-- <module>grapher</module>
<module>logging</module>