The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

ircindexer-server-json - Serve IRC::Indexer JSON over HTTP

SYNOPSIS

  ## Create example httpd.cf:
  $ ircindexer-examplecf -t httpd -o httpd.cf
  $ $EDITOR httpd.cf

  ## Add some servers:
  $ mkdir -p networks/cobaltirc
  $ ircindexer-examplecf -t spec -o \
      networks/cobaltirc/phoenix.xyloid.org
  $ $EDITOR networks/cobaltirc/phoenix.xyloid.org

  ## Start server:
  $ ircindexer-server-json -c httpd.cf

DESCRIPTION

Indexes sets of servers in parallel via IRC::Indexer, exporting information as JSON via HTTP for ease of retrieval.

Uses POEx::HTTP::Server to provide HTTP daemon functionality.

JSON is encoded by forked IRC::Indexer::Process::JSONify instances.

Intended to serve as the back-end to a presentation system for the data collected. See <IRC::Indexer::POD::ExampleClients> for some examples of ways to make use of the exported data on the client side.

Fetching JSON

Networks or servers that are configured but not yet trawled will report a 404 error with a string indicating that the trawl run is pending.

You can check 404s for network/server requests for status information.

If the first word of the 404 content is PENDING, the requested item is pending a trawler run.

If the first word of the 404 content is NO_SUCH, the requested item is not being indexed by the trawler.

List

A hash containing networks and servers scheduled for trawling is available via /list:

  ## JSON hash containing network -> server mapping of
  ## configured trawlers:
  http://my.server:8700/list

Note that this is the list of configured network -> server maps, not necessarily the list of trawled servers.

That is to say, the network names are guaranteed valid, but the server names may not be available under the /network/<NET>/server/ tree; for a list of servers available for retrieval, see "Servers", below.

Networks

Network information hashes are exported via /network/ routes:

  ## JSON array of available trawled networks:
  http://my.server:8700/network

  ## JSON Network Info hash for 'CobaltIRC':
  http://my.server:8700/network/CobaltIRC
  
  ## Compressed:
  http://my.server:8700/network/CobaltIRC?gzip

These are indexed by their configured network name.

Servers

Specific server hashes as described in IRC::Indexer::Trawl::Bot are exported via /network/<NETNAME>/server/<SERVERNAME>:

  ## List of trawled servers for this network:
  http://my.server:8700/network/CobaltIRC/server

  ## Trawl results from a single server:
  http://my.server:8700/network/CobaltIRC/server/eris.oppresses.us
  
  ## Compressed:
  http://my.server:8700/network/CobaltIRC/server/eris.oppresses.us?gzip

Note that servers are not available for retrieval until they are trawled; depending on trawl intervals, it may take some time to cycle through all listed servers for a network.

Also note that servers are indexed by their reported server name -- not necessarily the name specified in their configuration.

Stats

Stats regarding the running instance are exported via /stats:

  http://my.server:8700/stats

Reloading networks

You can reload the existing networks set and force a rehash by sending a SIGHUP to the server.

Your NetworkDir will be re-scanned and any removed networks will be pulled from the trawl cache. All networks will have their trawl runs rescheduled immediately -- in other words, SIGHUP can also be used to force a refresh.

AUTHOR

Jon Portnoy <avenj@cobaltirc.org>

http://www.cobaltirc.org