Search in sources :

Example 1 with Sender

use of loghub.Sender in project LogHub by fbacchella.

the class Nsca method configure.

@Override
public boolean configure(Properties properties) {
    try {
        NagiosSettings settings = new NagiosSettings();
        if (port > 0) {
            settings.setPort(port);
        }
        if (nagiosServer != null) {
            settings.setNagiosHost(nagiosServer);
        }
        if (encryption != null) {
            settings.setEncryption(encryption);
        }
        if (password != null) {
            settings.setPassword(password);
        }
        if (connectTimeout >= 0) {
            settings.setConnectTimeout(connectTimeout);
        }
        if (timeout >= 0) {
            settings.setTimeout(timeout);
        }
        if (largeMessageSupport) {
            settings.enableLargeMessageSupport();
        }
        sender = new NagiosPassiveCheckSender(settings);
        // Uses a map to ensure that each field is tested, for easier debuging
        return MAPFIELD.enumerate().map(i -> {
            if (!mapping.containsKey(i)) {
                logger.error("NSCA mapping field '{}' missing", i);
                return false;
            } else {
                return true;
            }
        }).allMatch(i -> i) && super.configure(properties);
    } catch (IllegalArgumentException e) {
        logger.error("invalid NSCA configuration: {}", e.getMessage());
        return false;
    }
}
Also used : Arrays(java.util.Arrays) MessagePayload(com.googlecode.jsendnsca.MessagePayload) NagiosException(com.googlecode.jsendnsca.NagiosException) NagiosSettings(com.googlecode.jsendnsca.NagiosSettings) IOException(java.io.IOException) HashMap(java.util.HashMap) BlockingQueue(java.util.concurrent.BlockingQueue) NagiosPassiveCheckSender(com.googlecode.jsendnsca.NagiosPassiveCheckSender) Level(com.googlecode.jsendnsca.Level) Stream(java.util.stream.Stream) Encryption(com.googlecode.jsendnsca.encryption.Encryption) Sender(loghub.Sender) Map(java.util.Map) Event(loghub.Event) Properties(loghub.configuration.Properties) NagiosPassiveCheckSender(com.googlecode.jsendnsca.NagiosPassiveCheckSender) NagiosSettings(com.googlecode.jsendnsca.NagiosSettings)

Example 2 with Sender

use of loghub.Sender in project LogHub by fbacchella.

the class Configuration method analyze.

private Properties analyze(ConfigListener conf) throws ConfigException {
    final Map<String, Object> newProperties = new HashMap<String, Object>(conf.properties.size() + Properties.PROPSNAMES.values().length + System.getProperties().size());
    // Resolvers properties found and and it to new properties
    Function<Object, Object> resolve = i -> {
        return ((i instanceof ConfigListener.ObjectWrapped) ? ((ConfigListener.ObjectWrapped) i).wrapped : (i instanceof ConfigListener.ObjectReference) ? parseObjectDescription((ConfigListener.ObjectDescription) i, emptyConstructor) : i);
    };
    conf.properties.entrySet().stream().forEach(i -> newProperties.put(i.getKey(), resolve.apply(i.getValue())));
    // Resolve the sources
    ThrowingFunction<Class<Source>, Source> sourceConstructor = i -> {
        return i.getConstructor().newInstance();
    };
    conf.sources.forEach((name, sd) -> {
        Source s = parseObjectDescription(sd, sourceConstructor);
        s.setName(name);
        sources.put(name, s);
    });
    Map<String, Pipeline> namedPipeLine = new HashMap<>(conf.pipelines.size());
    newProperties.put(Properties.PROPSNAMES.CLASSLOADERNAME.toString(), classLoader);
    Set<Pipeline> pipelines = new HashSet<>();
    // Generate all the named pipeline
    for (Entry<String, ConfigListener.PipenodesList> e : conf.pipelines.entrySet()) {
        String name = e.getKey();
        Pipeline p = parsePipeline(e.getValue(), name, 0, new AtomicInteger());
        pipelines.add(p);
        namedPipeLine.put(name, p);
        if (p.nextPipeline != null) {
            topPipelines.add(p.nextPipeline);
        }
    }
    newProperties.put(Properties.PROPSNAMES.PIPELINES.toString(), Collections.unmodifiableSet(pipelines));
    namedPipeLine = Collections.unmodifiableMap(namedPipeLine);
    newProperties.put(Properties.PROPSNAMES.NAMEDPIPELINES.toString(), namedPipeLine);
    // Find the queue depth
    final int queuesDepth = newProperties.containsKey("queueDepth") ? (Integer) newProperties.remove("queueDepth") : DEFAULTQUEUEDEPTH;
    newProperties.put(Properties.PROPSNAMES.QUEUESDEPTH.toString(), queuesDepth);
    BlockingQueue<Event> mainQueue = new ArrayBlockingQueue<Event>(queuesDepth);
    Map<String, BlockingQueue<Event>> outputQueues = new HashMap<>(namedPipeLine.size());
    namedPipeLine.keySet().stream().forEach(i -> outputQueues.put(i, new ArrayBlockingQueue<Event>(queuesDepth)));
    newProperties.put(Properties.PROPSNAMES.FORMATTERS.toString(), conf.formatters);
    newProperties.put(Properties.PROPSNAMES.MAINQUEUE.toString(), mainQueue);
    newProperties.put(Properties.PROPSNAMES.OUTPUTQUEUE.toString(), outputQueues);
    // Fill the receivers list
    receivers = new ArrayList<>();
    for (Input i : conf.inputs) {
        if (i.piperef == null || !namedPipeLine.containsKey(i.piperef)) {
            throw new RuntimeException("Invalid input, no destination pipeline: " + i);
        }
        for (ConfigListener.ObjectDescription desc : i.receiver) {
            Pipeline p = namedPipeLine.get(i.piperef);
            ThrowingFunction<Class<Receiver>, Receiver> receiverConstructor = r -> {
                return r.getConstructor(BlockingQueue.class, Pipeline.class).newInstance(mainQueue, p);
            };
            Receiver r = (Receiver) parseObjectDescription(desc, receiverConstructor);
            receivers.add(r);
        }
        inputpipelines.add(i.piperef);
    }
    topPipelines.addAll(inputpipelines);
    inputpipelines = Collections.unmodifiableSet(inputpipelines);
    receivers = Collections.unmodifiableList(receivers);
    newProperties.put(Properties.PROPSNAMES.RECEIVERS.toString(), receivers);
    // Fill the senders list
    senders = new ArrayList<>();
    for (Output o : conf.outputs) {
        if (o.piperef == null || !namedPipeLine.containsKey(o.piperef)) {
            throw new RuntimeException("Invalid output, no source pipeline: " + o);
        }
        for (ConfigListener.ObjectDescription desc : o.sender) {
            BlockingQueue<Event> out = outputQueues.get(o.piperef);
            ThrowingFunction<Class<Sender>, Sender> senderConstructor = r -> {
                return r.getConstructor(BlockingQueue.class).newInstance(out);
            };
            Sender s = (Sender) parseObjectDescription(desc, senderConstructor);
            // logger.debug("sender {} source point will be {}", () -> s, () -> namedPipeLine.get(o.piperef).outQueue);
            senders.add(s);
        }
        outputpipelines.add(o.piperef);
    }
    topPipelines.addAll(outputpipelines);
    outputpipelines = Collections.unmodifiableSet(outputpipelines);
    senders = Collections.unmodifiableList(senders);
    newProperties.put(Properties.PROPSNAMES.SENDERS.toString(), senders);
    newProperties.put(Properties.PROPSNAMES.TOPPIPELINE.toString(), Collections.unmodifiableSet(topPipelines));
    newProperties.put(Properties.PROPSNAMES.SOURCES.toString(), Collections.unmodifiableMap(sources));
    // Allows the system properties to override any properties given in the configuration file
    // But only if they are not some of the special internal properties
    Set<String> privatepropsnames = new HashSet<>(Properties.PROPSNAMES.values().length);
    Arrays.stream(Properties.PROPSNAMES.values()).forEach(i -> privatepropsnames.add(i.toString()));
    ;
    System.getProperties().entrySet().stream().filter(i -> !privatepropsnames.contains(i.getKey())).forEach(i -> newProperties.put(i.getKey().toString(), i.getValue()));
    return new Properties(newProperties);
}
Also used : PropertyContext(loghub.RouteParser.PropertyContext) Arrays(java.util.Arrays) ArrayContext(loghub.RouteParser.ArrayContext) Input(loghub.configuration.ConfigListener.Input) URL(java.net.URL) LoggerContext(org.apache.logging.log4j.core.LoggerContext) URISyntaxException(java.net.URISyntaxException) CommonTokenStream(org.antlr.v4.runtime.CommonTokenStream) URLClassLoader(java.net.URLClassLoader) CharStreams(org.antlr.v4.runtime.CharStreams) Helpers(loghub.Helpers) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Locale(java.util.Locale) ObjectReference(loghub.configuration.ConfigListener.ObjectReference) Map(java.util.Map) URI(java.net.URI) Path(java.nio.file.Path) DateTimeException(java.time.DateTimeException) Receiver(loghub.Receiver) TimeZone(java.util.TimeZone) Collection(java.util.Collection) LiteralContext(loghub.RouteParser.LiteralContext) Set(java.util.Set) BlockingQueue(java.util.concurrent.BlockingQueue) Reader(java.io.Reader) RouteLexer(loghub.RouteLexer) ZoneId(java.time.ZoneId) RouteParser(loghub.RouteParser) InvocationTargetException(java.lang.reflect.InvocationTargetException) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) Processor(loghub.Processor) List(java.util.List) Logger(org.apache.logging.log4j.Logger) Entry(java.util.Map.Entry) Pattern(java.util.regex.Pattern) ParserRuleContext(org.antlr.v4.runtime.ParserRuleContext) ThrowingFunction(loghub.Helpers.ThrowingFunction) ThrowingConsumer(loghub.Helpers.ThrowingConsumer) HashMap(java.util.HashMap) Function(java.util.function.Function) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) CharStream(org.antlr.v4.runtime.CharStream) Sender(loghub.Sender) ThrowingPredicate(loghub.Helpers.ThrowingPredicate) Output(loghub.configuration.ConfigListener.Output) BeanValueContext(loghub.RouteParser.BeanValueContext) MalformedURLException(java.net.MalformedURLException) Files(java.nio.file.Files) ParseTreeWalker(org.antlr.v4.runtime.tree.ParseTreeWalker) Pipeline(loghub.Pipeline) IOException(java.io.IOException) Source(loghub.Source) File(java.io.File) Consumer(java.util.function.Consumer) NamedSubPipeline(loghub.processors.NamedSubPipeline) RecognitionException(org.antlr.v4.runtime.RecognitionException) Paths(java.nio.file.Paths) AnonymousSubPipeline(loghub.processors.AnonymousSubPipeline) Collections(java.util.Collections) LogManager(org.apache.logging.log4j.LogManager) Event(loghub.Event) InputStream(java.io.InputStream) HashMap(java.util.HashMap) Source(loghub.Source) Input(loghub.configuration.ConfigListener.Input) ObjectReference(loghub.configuration.ConfigListener.ObjectReference) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) Output(loghub.configuration.ConfigListener.Output) HashSet(java.util.HashSet) BlockingQueue(java.util.concurrent.BlockingQueue) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) Receiver(loghub.Receiver) Pipeline(loghub.Pipeline) NamedSubPipeline(loghub.processors.NamedSubPipeline) AnonymousSubPipeline(loghub.processors.AnonymousSubPipeline) Sender(loghub.Sender) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Event(loghub.Event)

Example 3 with Sender

use of loghub.Sender in project LogHub by fbacchella.

the class TestWithZMQ method testSimpleInput.

@Test(timeout = 3000)
public void testSimpleInput() throws InterruptedException, ConfigException, IOException {
    Properties conf = Tools.loadConf("simpleinput.conf");
    logger.debug("pipelines: {}", conf.pipelines);
    for (Receiver r : conf.receivers) {
        Assert.assertTrue("failed to configure " + r, r.configure(conf));
        r.start();
    }
    for (Sender s : conf.senders) {
        Assert.assertTrue("failed to configure " + s, s.configure(conf));
        s.start();
    }
    Socket out = tctxt.ctx.newSocket(Method.CONNECT, Type.SUB, "inproc://sender", 1, -1);
    out.subscribe(new byte[] {});
    Socket sender = tctxt.ctx.newSocket(Method.CONNECT, Type.PUB, "inproc://listener", 1, -1);
    // Wait for ZMQ to be started
    Thread.sleep(30);
    sender.send("something");
    Event received = conf.mainQueue.poll(1, TimeUnit.SECONDS);
    Assert.assertNotNull("nothing received", received);
    conf.outputQueues.get("main").add(received);
    byte[] buffer = out.recv();
    Assert.assertEquals("wrong send message", "something", new String(buffer));
    tctxt.ctx.close(sender);
    tctxt.ctx.close(out);
    for (Receiver r : conf.receivers) {
        r.interrupt();
    }
    for (Sender s : conf.senders) {
        s.interrupt();
    }
    SmartContext.getContext().terminate();
}
Also used : Sender(loghub.Sender) Receiver(loghub.Receiver) Event(loghub.Event) Socket(org.zeromq.ZMQ.Socket) Test(org.junit.Test)

Aggregations

Event (loghub.Event)3 Sender (loghub.Sender)3 IOException (java.io.IOException)2 Arrays (java.util.Arrays)2 HashMap (java.util.HashMap)2 Map (java.util.Map)2 BlockingQueue (java.util.concurrent.BlockingQueue)2 Level (com.googlecode.jsendnsca.Level)1 MessagePayload (com.googlecode.jsendnsca.MessagePayload)1 NagiosException (com.googlecode.jsendnsca.NagiosException)1 NagiosPassiveCheckSender (com.googlecode.jsendnsca.NagiosPassiveCheckSender)1 NagiosSettings (com.googlecode.jsendnsca.NagiosSettings)1 Encryption (com.googlecode.jsendnsca.encryption.Encryption)1 File (java.io.File)1 InputStream (java.io.InputStream)1 Reader (java.io.Reader)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 MalformedURLException (java.net.MalformedURLException)1 URI (java.net.URI)1 URISyntaxException (java.net.URISyntaxException)1