npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

glossy

v0.1.7

Published

Syslog parser and producer

Downloads

392,822

Readme

glossy

glossy aims to be a very generic yet powerful library for both producing and also parsing raw syslog messages. The library aims to be capable of adhearing to RFC 3164, RFC 5424 and RFC 5848 and by itself does no network interactions, it's up to you to use this library as a syslog producer, a consumer, relay or something else entirely. In addition, glossy has no dependencies and can be bootstrapped to operate in browser or other non-node.js environments.

Parsing

var syslogParser = require('glossy').Parse; // or wherever your glossy libs are

parsedMessage = syslogParser.parse(message);

parsedMessage will return an object containing as many parsed values as possible, as well as the original message. The date value will be a Date object. Structured data will return as an object. Alternatively, you can give it a callback as your second argument:

syslogParser.parse(message, function(parsedMessage){
    console.log(parsedMessage);
});

Producing

Unless you stipulate for BSD/RFC 3164 style messages, it will default to generating all messages as newer, RFC 5424 format. This might break consumers or relays not expecting it.

var syslogProducer = require('glossy').Produce; // or wherever glossy lives

var msg = syslogProducer.produce({
    facility: 'local4', // these can either be a valid integer, 
    severity: 'error',  // or a relevant string
    host: 'localhost',
    appName: 'sudo',
    pid: '123',
    date: new Date(Date()),
    message: 'Nice, Neat, New, Oh Wow'
});

Again, you can specify a callback for the second argument.

var msg = syslogProducer.produce({
    facility: 'ntp', 
    severity: 'info',
    host: 'localhost',
    date: new Date(Date()),
    message: 'Lunch Time!'
}, function(syslogMsg){
    console.log(syslogMsg);
});

In addition, you can also predefined most of the values when you create the object, to save having to repeat yourself:

var syslogProducer = new require('glossy').Produce({
    type: 'BSD',
    facility: 'ftp',
    pid: 42,
    host: '::1'        
});

For RFC5424 messages, you can also include structured data. Keys should comply with the definition in Section 7, RFC5424 regarding names - keep them unique and your own custom keys should have at least an @ sign.

var msg = syslogProducer.produce({
    facility: 'local4', 
    severity: 'error',
    host: 'localhost',
    appName: 'starman',
    pid: '123',
    date: new Date(Date()),
    message: 'ACHTUNG!',
    structuredData: {
        'plack@host': {
            status: 'broken',
            hasTried: 'not really'
        }
    }
});

Finally, we expose all the severities as functions themselves:

var infoMsg = glossy.info({
       message: 'Info Message',
});

Function names facilitating this are named debug, info, notice, warn, crit, alert and emergency.

Parsing Example

Handle incoming syslog messages coming in on UDP port 514:

var syslogParser = require('glossy').Parse; // or wherever your glossy libs are
var dgram  = require("dgram");
var server = dgram.createSocket("udp4");

server.on("message", function(rawMessage) {
    syslogParser.parse(rawMessage.toString('utf8', 0), function(parsedMessage){
        console.log(parsedMessage.host + ' - ' + parsedMessage.message);
    });
});

server.on("listening", function() {
    var address = server.address();
    console.log("Server now listening at " + 
        address.address + ":" + address.port);
});

server.bind(514); // Remember ports < 1024 need suid

Author

Squeeks - [email protected]

License

This is free software licensed under the MIT License - see the LICENSE file that should be included with this package.