diff -r 252cdb26f76b -r 475c9942eb15 netdata_tsrelay.nim --- a/netdata_tsrelay.nim Sun Feb 18 23:40:34 2018 -0800 +++ b/netdata_tsrelay.nim Mon Feb 19 18:22:25 2018 -0800 @@ -51,13 +51,15 @@ -q: Quiet mode. No output at all. Ignored if -d is supplied. -d: Debug: Show incoming and parsed data. -v: Display version number. + -T: Change the destination table name from the default 'netdata'. + -t: Alter the maximum time (in ms) an open socket waits for data. Default: 500ms. -h: Help. You're lookin' at it. The default connection string is: "host=localhost port=5432 dbname=netdata user=netdata application_name=netdata-tsrelay" """ INSERT_SQL = """ - INSERT INTO netdata + INSERT INTO $1 ( time, host, metrics ) VALUES ( 'epoch'::timestamptz + ? * '1 second'::interval, ?, ? ) @@ -67,10 +69,13 @@ type Config = object of RootObj dbopts: string # The postgresql connection parameters. (See https://www.postgresql.org/docs/current/static/libpq-connect.html) - listen_port: int # The port to listen for incoming connections + dbtable: string # The name of the table to write to. + listen_port: int # The port to listen for incoming connections. listen_addr: string # The IP address listen for incoming connections. Defaults to inaddr_any. verbose: bool # Be informative debug: bool # Spew out raw data + insertsql: string # The SQL insert string after interpolating the table name. + timeout: int # How long to block, waiting on connection data. # Global configuration var conf: Config @@ -91,10 +96,10 @@ ## line and wait for stream timeout to determine a "sample". var buf: string = nil try: - result = client.recv_line( timeout=500 ) + result = client.recv_line( timeout=conf.timeout ) if result != "" and not result.is_nil: result = result & "\n" while buf != "": - buf = client.recv_line( timeout=500 ) + buf = client.recv_line( timeout=conf.timeout ) if buf != "" and not buf.is_nil: result = result & buf & "\n" except TimeoutError: discard @@ -111,7 +116,7 @@ for sample in split_lines( data ): if sample == "" or sample.is_nil: continue - #if conf.debug: echo sample.hl( fgBlack, bright=true ) + if conf.debug: echo sample.hl( fgBlack, bright=true ) var parsed: JsonNode try: @@ -158,7 +163,7 @@ host = sample[ "hostname" ].get_str sample.delete( "timestamp" ) sample.delete( "hostname" ) - db.exec sql( INSERT_SQL ), timestamp, host, sample + db.exec sql( conf.insertsql ), timestamp, host, sample db.exec sql( "COMMIT" ) except: let @@ -255,10 +260,13 @@ # result = Config( dbopts: "host=localhost port=5432 dbname=netdata user=netdata application_name=netdata-tsrelay", + dbtable: "netdata", listen_port: 14866, listen_addr: "0.0.0.0", verbose: true, - debug: false + debug: false, + timeout: 500, + insertsql: INSERT_SQL % [ "netdata" ] ) # always set debug mode if development build. @@ -281,12 +289,17 @@ of "quiet", "q": result.verbose = false - + of "version", "v": echo hl( "netdata_tsrelay " & VERSION, fgWhite, bright=true ) quit( 0 ) - + + of "timeout", "t": result.timeout = val.parse_int + + of "dbtable", "T": + result.insertsql = INSERT_SQL % [ val ] of "dbopts": result.dbopts = val + of "listen-addr", "a": result.listen_addr = val of "listen-port", "p": result.listen_port = val.parse_int