11 Commits

Author SHA1 Message Date
Eric Fontana
b07d15c9aa Must use secure version of url 2015-06-04 08:33:18 -04:00
Eric Fontana
063471ff28 Publish to Chocolatey use correct server. 2015-06-04 08:21:54 -04:00
Eric Fontana
606d72b55f .nuspec template needed version number fixing 2015-06-04 08:04:06 -04:00
Eric Fontana
d89e949185 Fixed version number for nuget package scripts. 2015-06-04 08:02:13 -04:00
Eric Fontana
d93ea4a5a2 Yaml wants spaces not tabs. 2015-06-04 07:52:05 -04:00
Eric Fontana
062b076c61 Commands must have newlines. 2015-06-04 07:50:55 -04:00
Eric Fontana
1312e2ddd5 Fixed tab -> spaces 2015-06-04 07:42:43 -04:00
Eric Fontana
9fe7e1e15a Package for choco after build. 2015-06-04 07:39:59 -04:00
Eric Fontana
9e11c4c926 Use correct env var for version. 2015-06-04 07:37:19 -04:00
Eric Fontana
1f211f2713 Fixed powershell before_build 2015-06-04 07:34:02 -04:00
Eric Fontana
2aebd5689a First attempt at new yaml. 2015-06-04 07:21:08 -04:00
22 changed files with 105 additions and 266 deletions

View File

@@ -261,3 +261,5 @@ Use these commands to Stop/Start the service.
sc stop TimberWinR ; stop the service sc stop TimberWinR ; stop the service
sc start TimberWinR; start the service sc start TimberWinR; start the service
``` ```

View File

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.27.0")] [assembly: AssemblyVersion("1.3.26.0")]
[assembly: AssemblyFileVersion("1.3.27.0")] [assembly: AssemblyFileVersion("1.3.26.0")]

View File

@@ -1,6 +1,4 @@
using TimberWinR.Outputs; namespace TimberWinR.UnitTests.Parser
namespace TimberWinR.UnitTests.Parser
{ {
using System; using System;
@@ -53,51 +51,5 @@ namespace TimberWinR.UnitTests.Parser
Assert.AreEqual("someindex-" + DateTime.UtcNow.ToString("yyyy.MM.dd"), result); Assert.AreEqual("someindex-" + DateTime.UtcNow.ToString("yyyy.MM.dd"), result);
} }
[Test]
public void Given_no_ssl_then_validate_does_not_throw()
{
parser.Ssl = false;
Assert.That(() => parser.Validate(), Throws.Nothing);
}
[Test]
public void Given_ssl_and_no_username_then_validate_throws()
{
parser.Ssl = true;
parser.Password = "pass";
Assert.That(() => parser.Validate(), Throws.Exception.InstanceOf<ElasticsearchOutputParameters.ElasticsearchBasicAuthException>());
}
[Test]
public void Given_ssl_and_no_password_then_validate_throws()
{
parser.Ssl = true;
parser.Username = "user";
Assert.That(() => parser.Validate(), Throws.Exception.InstanceOf<ElasticsearchOutputParameters.ElasticsearchBasicAuthException>());
}
[Test]
public void Given_ssl_and_username_and_password_then_validate_does_not_throw()
{
parser.Ssl = true;
parser.Username = "user";
parser.Password = "pass";
Assert.That(() => parser.Validate(), Throws.Nothing);
}
[Test]
[TestCase("host", 1234, false, null, null, "http://host:1234/")]
[TestCase("host", 1234, true, "user", "pass", "https://user:pass@host:1234/")]
[TestCase("host", 1234, true, "user:", "pass@", "https://user%3A:pass%40@host:1234/")]
public void ComposeUri_Matches_Expected(string host, int port, bool ssl, string username, string password, string expectedUri)
{
var uri = ElasticsearchOutput.ComposeUri(host, port, ssl, username, password);
Assert.That(uri.ToString(), Is.EqualTo(expectedUri));
}
} }
} }

View File

@@ -8,7 +8,7 @@ using System.Threading;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.IO; using System.IO;
using System.Linq.Expressions;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using NLog; using NLog;
@@ -52,48 +52,29 @@ namespace TimberWinR.Diagnostics
public JObject DiagnosticsOutput() public JObject DiagnosticsOutput()
{ {
JObject json = new JObject( JObject json = new JObject(
new JProperty("timberwinr", new JProperty("timberwinr",
new JObject( new JObject(
new JProperty("version", Assembly.GetEntryAssembly().GetName().Version.ToString()), new JProperty("version", Assembly.GetEntryAssembly().GetName().Version.ToString()),
new JProperty("messages", Manager.NumMessages), new JProperty("messages", Manager.NumMessages),
new JProperty("startedon", Manager.StartedOn), new JProperty("startedon", Manager.StartedOn),
new JProperty("configfile", Manager.JsonConfig), new JProperty("configfile", Manager.JsonConfig),
new JProperty("logdir", Manager.LogfileDir), new JProperty("logdir", Manager.LogfileDir),
new JProperty("logginglevel", LogManager.GlobalThreshold.ToString()) new JProperty("logginglevel", LogManager.GlobalThreshold.ToString()),
))); new JProperty("inputs",
AddDiagnosis(json); new JArray(
from i in Manager.Listeners
select new JObject(i.ToJson()))),
new JProperty("filters",
new JArray(
from f in Manager.Config.Filters
select new JObject(f.ToJson()))),
new JProperty("outputs",
new JArray(
from o in Manager.Outputs
select new JObject(o.ToJson()))))));
return json; return json;
} }
protected void AddDiagnosis(JObject wrapper)
{
wrapper.Add("inputs", GetDiagnosisByType("inputs", Manager.Listeners.ToList<IDiagnosable>()));
wrapper.Add("filters", GetDiagnosisByType("filters", Manager.Config.Filters.ToList<IDiagnosable>()));
wrapper.Add("outputs", GetDiagnosisByType("inputs", Manager.Outputs.ToList<IDiagnosable>()));
}
protected JObject GetDiagnosisByType(String type, List<IDiagnosable> diags)
{
JObject category = new JObject();
foreach(IDiagnosable diag in diags)
{
JArray array = GetTypeArray(diag.GetType().Name.ToString(), category);
array.Add(diag.ToJson());
}
return category;
}
protected JArray GetTypeArray(String name, JObject category)
{
JArray ret = (JArray)category.GetValue(name);
if (ret == null)
{
ret = new JArray();
category.Add(new JProperty(name, ret));
}
return ret;
}
private void DiagnosticCallback(IAsyncResult result) private void DiagnosticCallback(IAsyncResult result)
{ {
if (web == null) if (web == null)

View File

@@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json.Linq;
namespace TimberWinR.Diagnostics
{
public interface IDiagnosable
{
JObject ToJson();
}
}

View File

@@ -135,6 +135,8 @@ namespace TimberWinR.Inputs
rs.close(); rs.close();
GC.Collect(); GC.Collect();
} }
if (!Stop)
syncHandle.Wait(TimeSpan.FromSeconds(_pollingIntervalInSeconds), CancelToken);
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
@@ -143,18 +145,7 @@ namespace TimberWinR.Inputs
catch (Exception ex) catch (Exception ex)
{ {
LogManager.GetCurrentClassLogger().Error(ex); LogManager.GetCurrentClassLogger().Error(ex);
} }
finally
{
try
{
if (!Stop)
syncHandle.Wait(TimeSpan.FromSeconds(_pollingIntervalInSeconds), CancelToken);
}
catch (Exception)
{
}
}
} }
} }
} }

View File

@@ -8,11 +8,10 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using NLog; using NLog;
using TimberWinR.Diagnostics;
namespace TimberWinR.Inputs namespace TimberWinR.Inputs
{ {
public abstract class InputListener: IDiagnosable public abstract class InputListener
{ {
public CancellationToken CancelToken { get; set; } public CancellationToken CancelToken { get; set; }
public event Action<JObject> OnMessageRecieved; public event Action<JObject> OnMessageRecieved;

View File

@@ -8,7 +8,6 @@ using TimberWinR.Parser;
using LogQuery = Interop.MSUtil.LogQueryClassClass; using LogQuery = Interop.MSUtil.LogQueryClassClass;
using EventLogInputFormat = Interop.MSUtil.COMEventLogInputContextClassClass; using EventLogInputFormat = Interop.MSUtil.COMEventLogInputContextClassClass;
using LogRecordSet = Interop.MSUtil.ILogRecordset; using LogRecordSet = Interop.MSUtil.ILogRecordset;
using System.IO;
namespace TimberWinR.Inputs namespace TimberWinR.Inputs
{ {
@@ -98,13 +97,12 @@ namespace TimberWinR.Inputs
// Execute the query // Execute the query
if (!CancelToken.IsCancellationRequested) if (!CancelToken.IsCancellationRequested)
{ {
var oLogQuery = new LogQuery();
try try
{ {
var oLogQuery = new LogQuery();
var qfiles = string.Format("SELECT Distinct [EventLog] FROM {0}", location); var qfiles = string.Format("SELECT Distinct [EventLog] FROM {0}", location);
var rsfiles = oLogQuery.Execute(qfiles, iFmt); var rsfiles = oLogQuery.Execute(qfiles, iFmt);
for (; !rsfiles.atEnd(); rsfiles.moveNext()) for (; !rsfiles.atEnd(); rsfiles.moveNext())
{ {
var record = rsfiles.getRecord(); var record = rsfiles.getRecord();
@@ -115,7 +113,7 @@ namespace TimberWinR.Inputs
logName); logName);
var rcount = oLogQuery.Execute(qcount, iFmt); var rcount = oLogQuery.Execute(qcount, iFmt);
var qr = rcount.getRecord(); var qr = rcount.getRecord();
var lrn = (Int64) qr.getValueEx("MaxRecordNumber"); var lrn = (Int64)qr.getValueEx("MaxRecordNumber");
logFileMaxRecords[logName] = lrn; logFileMaxRecords[logName] = lrn;
} }
} }
@@ -139,13 +137,12 @@ namespace TimberWinR.Inputs
object v = record.getValue(field.Name); object v = record.getValue(field.Name);
if (field.Name == "Data") if (field.Name == "Data")
v = ToPrintable(v.ToString()); v = ToPrintable(v.ToString());
if ((field.Name == "TimeGenerated" || field.Name == "TimeWritten") && if ((field.Name == "TimeGenerated" || field.Name == "TimeWritten") && field.DataType == typeof (DateTime))
field.DataType == typeof (DateTime))
v = ((DateTime) v).ToUniversalTime(); v = ((DateTime) v).ToUniversalTime();
json.Add(new JProperty(field.Name, v)); json.Add(new JProperty(field.Name, v));
} }
var lrn = (Int64) record.getValueEx("RecordNumber"); var lrn = (Int64)record.getValueEx("RecordNumber");
logFileMaxRecords[fileName] = lrn; logFileMaxRecords[fileName] = lrn;
ProcessJson(json); ProcessJson(json);
@@ -166,24 +163,6 @@ namespace TimberWinR.Inputs
{ {
LogManager.GetCurrentClassLogger().Error(ex); LogManager.GetCurrentClassLogger().Error(ex);
} }
finally
{
try
{
oLogQuery = null;
// Sleep
if (!Stop)
syncHandle.Wait(TimeSpan.FromSeconds(_pollingIntervalInSeconds), CancelToken);
}
catch (OperationCanceledException)
{
}
catch (Exception ex1)
{
LogManager.GetCurrentClassLogger().Warn(ex1);
}
}
} }
} }
Finished(); Finished();

View File

@@ -29,9 +29,6 @@ namespace TimberWinR.Outputs
{ {
private TimberWinR.Manager _manager; private TimberWinR.Manager _manager;
private readonly int _port; private readonly int _port;
private readonly bool _ssl;
private readonly string _username;
private readonly string _password;
private readonly int _interval; private readonly int _interval;
private readonly int _flushSize; private readonly int _flushSize;
private readonly int _idleFlushTimeSeconds; private readonly int _idleFlushTimeSeconds;
@@ -60,8 +57,8 @@ namespace TimberWinR.Outputs
var nodes = new List<Uri>(); var nodes = new List<Uri>();
foreach (var host in _hosts) foreach (var host in _hosts)
{ {
var uri = ComposeUri(host, _port, _ssl, _username, _password); var url = string.Format("http://{0}:{1}", host, _port);
nodes.Add(uri); nodes.Add(new Uri(url));
} }
var pool = new StaticConnectionPool(nodes.ToArray()); var pool = new StaticConnectionPool(nodes.ToArray());
var settings = new ConnectionSettings(pool) var settings = new ConnectionSettings(pool)
@@ -76,13 +73,6 @@ namespace TimberWinR.Outputs
return client; return client;
} }
public static Uri ComposeUri(string host, int port, bool ssl, string username, string password)
{
return ssl
? new Uri(string.Format("https://{0}:{1}@{2}:{3}", Uri.EscapeDataString(username), Uri.EscapeDataString(password), host, port))
: new Uri(string.Format("http://{0}:{1}", host, port));
}
public ElasticsearchOutput(TimberWinR.Manager manager, Parser.ElasticsearchOutputParameters parameters, CancellationToken cancelToken) public ElasticsearchOutput(TimberWinR.Manager manager, Parser.ElasticsearchOutputParameters parameters, CancellationToken cancelToken)
: base(cancelToken, "Elasticsearch") : base(cancelToken, "Elasticsearch")
{ {
@@ -96,9 +86,6 @@ namespace TimberWinR.Outputs
_timeout = parameters.Timeout; _timeout = parameters.Timeout;
_manager = manager; _manager = manager;
_port = parameters.Port; _port = parameters.Port;
_ssl = parameters.Ssl;
_username = parameters.Username;
_password = parameters.Password;
_interval = parameters.Interval; _interval = parameters.Interval;
_hosts = parameters.Host; _hosts = parameters.Host;
_jsonQueue = new List<JObject>(); _jsonQueue = new List<JObject>();
@@ -124,9 +111,6 @@ namespace TimberWinR.Outputs
new JProperty("messages", _sentMessages), new JProperty("messages", _sentMessages),
new JProperty("queuedMessageCount", _jsonQueue.Count), new JProperty("queuedMessageCount", _jsonQueue.Count),
new JProperty("port", _port), new JProperty("port", _port),
new JProperty("ssl", _ssl),
new JProperty("username", _username),
new JProperty("password", _password),
new JProperty("flushSize", _flushSize), new JProperty("flushSize", _flushSize),
new JProperty("idleFlushTime", _idleFlushTimeSeconds), new JProperty("idleFlushTime", _idleFlushTimeSeconds),
new JProperty("interval", _interval), new JProperty("interval", _interval),

View File

@@ -4,12 +4,11 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using TimberWinR.Diagnostics;
using TimberWinR.Inputs; using TimberWinR.Inputs;
namespace TimberWinR.Outputs namespace TimberWinR.Outputs
{ {
public abstract class OutputSender : IDiagnosable public abstract class OutputSender
{ {
public CancellationToken CancelToken { get; private set; } public CancellationToken CancelToken { get; private set; }
private List<InputListener> _inputs; private List<InputListener> _inputs;

View File

@@ -132,7 +132,6 @@ namespace TimberWinR.Outputs
private long _errorCount; private long _errorCount;
private long _redisDepth; private long _redisDepth;
private DateTime? _lastErrorTimeUTC; private DateTime? _lastErrorTimeUTC;
private DateTime? _lastSentTimeUTC;
private readonly int _maxQueueSize; private readonly int _maxQueueSize;
private readonly bool _queueOverflowDiscardOldest; private readonly bool _queueOverflowDiscardOldest;
private BatchCounter _batchCounter; private BatchCounter _batchCounter;
@@ -181,7 +180,6 @@ namespace TimberWinR.Outputs
new JProperty("host", string.Join(",", _redisHosts)), new JProperty("host", string.Join(",", _redisHosts)),
new JProperty("errors", _errorCount), new JProperty("errors", _errorCount),
new JProperty("lastErrorTimeUTC", _lastErrorTimeUTC), new JProperty("lastErrorTimeUTC", _lastErrorTimeUTC),
new JProperty("lastSentTimeUTC", _lastSentTimeUTC),
new JProperty("redisQueueDepth", _redisDepth), new JProperty("redisQueueDepth", _redisDepth),
new JProperty("sentMessageCount", _sentMessages), new JProperty("sentMessageCount", _sentMessages),
new JProperty("queuedMessageCount", _jsonQueue.Count), new JProperty("queuedMessageCount", _jsonQueue.Count),
@@ -319,13 +317,9 @@ namespace TimberWinR.Outputs
_batchCounter.SampleQueueDepth(_jsonQueue.Count); _batchCounter.SampleQueueDepth(_jsonQueue.Count);
// Re-compute current batch size // Re-compute current batch size
LogManager.GetCurrentClassLogger() LogManager.GetCurrentClassLogger().Trace("{0}: Average Queue Depth: {1}, Current Length: {2}", Thread.CurrentThread.ManagedThreadId, _batchCounter.AverageQueueDepth(), _jsonQueue.Count);
.Trace("{0}: Average Queue Depth: {1}, Current Length: {2}",
Thread.CurrentThread.ManagedThreadId, _batchCounter.AverageQueueDepth(), _currentBatchCount = _batchCounter.UpdateCurrentBatchCount(_jsonQueue.Count, _currentBatchCount);
_jsonQueue.Count);
_currentBatchCount = _batchCounter.UpdateCurrentBatchCount(_jsonQueue.Count,
_currentBatchCount);
messages = _jsonQueue.Take(_currentBatchCount).ToArray(); messages = _jsonQueue.Take(_currentBatchCount).ToArray();
_jsonQueue.RemoveRange(0, messages.Length); _jsonQueue.RemoveRange(0, messages.Length);
@@ -346,9 +340,7 @@ namespace TimberWinR.Outputs
{ {
client.StartPipe(); client.StartPipe();
LogManager.GetCurrentClassLogger() LogManager.GetCurrentClassLogger()
.Debug("{0}: Sending {1} Messages to {2}", .Debug("{0}: Sending {1} Messages to {2}", Thread.CurrentThread.ManagedThreadId, messages.Length, client.Host);
Thread.CurrentThread.ManagedThreadId, messages.Length,
client.Host);
try try
{ {
@@ -356,7 +348,6 @@ namespace TimberWinR.Outputs
Interlocked.Add(ref _sentMessages, messages.Length); Interlocked.Add(ref _sentMessages, messages.Length);
client.EndPipe(); client.EndPipe();
sentSuccessfully = true; sentSuccessfully = true;
_lastSentTimeUTC = DateTime.UtcNow;
if (messages.Length > 0) if (messages.Length > 0)
_manager.IncrementMessageCount(messages.Length); _manager.IncrementMessageCount(messages.Length);
} }
@@ -400,7 +391,9 @@ namespace TimberWinR.Outputs
_jsonQueue.InsertRange(0, messages); _jsonQueue.InsertRange(0, messages);
} }
} }
} }
if (!Stop)
syncHandle.Wait(TimeSpan.FromMilliseconds(_interval), CancelToken);
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
@@ -416,17 +409,6 @@ namespace TimberWinR.Outputs
Interlocked.Increment(ref _errorCount); Interlocked.Increment(ref _errorCount);
LogManager.GetCurrentClassLogger().Error(ex); LogManager.GetCurrentClassLogger().Error(ex);
} }
finally
{
try
{
if (!Stop)
syncHandle.Wait(TimeSpan.FromMilliseconds(_interval), CancelToken);
}
catch (Exception)
{
}
}
} }
} }
} }

View File

@@ -15,7 +15,6 @@ using NLog;
using NLog.Config; using NLog.Config;
using TimberWinR.Outputs; using TimberWinR.Outputs;
using System.CodeDom.Compiler; using System.CodeDom.Compiler;
using TimberWinR.Diagnostics;
namespace TimberWinR.Parser namespace TimberWinR.Parser
{ {
@@ -27,7 +26,7 @@ namespace TimberWinR.Parser
} }
public abstract class LogstashFilter : IValidateSchema, IDiagnosable public abstract class LogstashFilter : IValidateSchema
{ {
public abstract bool Apply(JObject json); public abstract bool Apply(JObject json);
@@ -626,16 +625,8 @@ namespace TimberWinR.Parser
} }
public class ElasticsearchOutputParameters : IValidateSchema public class ElasticsearchOutputParameters
{ {
public class ElasticsearchBasicAuthException : Exception
{
public ElasticsearchBasicAuthException()
: base("Elasticsearch 'username' and 'password' properties must be set when SSL is enabled.")
{
}
}
const string IndexDatePattern = "(%\\{(?<format>[^\\}]+)\\})"; const string IndexDatePattern = "(%\\{(?<format>[^\\}]+)\\})";
[JsonProperty(PropertyName = "host")] [JsonProperty(PropertyName = "host")]
@@ -644,12 +635,6 @@ namespace TimberWinR.Parser
public string Index { get; set; } public string Index { get; set; }
[JsonProperty(PropertyName = "port")] [JsonProperty(PropertyName = "port")]
public int Port { get; set; } public int Port { get; set; }
[JsonProperty(PropertyName = "ssl")]
public bool Ssl { get; set; }
[JsonProperty(PropertyName = "username")]
public string Username { get; set; }
[JsonProperty(PropertyName = "password")]
public string Password { get; set; }
[JsonProperty(PropertyName = "timeout")] [JsonProperty(PropertyName = "timeout")]
public int Timeout { get; set; } public int Timeout { get; set; }
[JsonProperty(PropertyName = "threads")] [JsonProperty(PropertyName = "threads")]
@@ -677,9 +662,6 @@ namespace TimberWinR.Parser
IdleFlushTimeInSeconds = 10; IdleFlushTimeInSeconds = 10;
Protocol = "http"; Protocol = "http";
Port = 9200; Port = 9200;
Ssl = false;
Username = string.Empty;
Password = string.Empty;
Index = ""; Index = "";
Host = new string[] { "localhost" }; Host = new string[] { "localhost" };
Timeout = 10000; Timeout = 10000;
@@ -729,11 +711,6 @@ namespace TimberWinR.Parser
return typeName; return typeName;
} }
public void Validate()
{
if (Ssl && (string.IsNullOrWhiteSpace(Username) || string.IsNullOrWhiteSpace(Password)))
throw new ElasticsearchBasicAuthException();
}
} }
public class RedisOutputParameters public class RedisOutputParameters

View File

@@ -96,7 +96,6 @@
<Compile Include="Configuration.cs" /> <Compile Include="Configuration.cs" />
<Compile Include="ConfigurationErrors.cs" /> <Compile Include="ConfigurationErrors.cs" />
<Compile Include="Diagnostics\Diagnostics.cs" /> <Compile Include="Diagnostics\Diagnostics.cs" />
<Compile Include="Diagnostics\IDiagnosable.cs" />
<Compile Include="Filters\DateFilter.cs" /> <Compile Include="Filters\DateFilter.cs" />
<Compile Include="Filters\FilterBase.cs" /> <Compile Include="Filters\FilterBase.cs" />
<Compile Include="Filters\GrokFilter.cs" /> <Compile Include="Filters\GrokFilter.cs" />

View File

@@ -14,9 +14,6 @@ The following parameters are allowed when configuring the Elasticsearch output.
| *interval* | integer | Interval in milliseconds to sleep during batch sends | Interval | 5000 | | *interval* | integer | Interval in milliseconds to sleep during batch sends | Interval | 5000 |
| *max_queue_size* | integer | Maximum Elasticsearch queue depth | | 50000 | | *max_queue_size* | integer | Maximum Elasticsearch queue depth | | 50000 |
| *port* | integer | Elasticsearch port number | This port must be open | 9200 | | *port* | integer | Elasticsearch port number | This port must be open | 9200 |
| *ssl* | bool | If true, use an HTTPS connection to Elasticsearch. See [this page] (https://www.elastic.co/guide/en/found/current/elk-and-found.html#_using_logstash) for a configuration example. | *username* and *password* are also required for HTTPS connections. | false |
| *username* | string | Username for Elasticsearch credentials. | Required for HTTPS connection. | |
| *password* | string | Password for Elasticsearch credentials. | Required for HTTPS connection. | |
| *queue_overflow_discard_oldest* | bool | If true, discard oldest messages when max_queue_size reached otherwise discard newest | | true | | *queue_overflow_discard_oldest* | bool | If true, discard oldest messages when max_queue_size reached otherwise discard newest | | true |
| *threads* | [string] | Number of Threads | Number of worker threads processing messages | 1 | | *threads* | [string] | Number of Threads | Number of worker threads processing messages | 1 |
| *enable_ping* | bool | If true, pings the server to test for keep alive | | false | | *enable_ping* | bool | If true, pings the server to test for keep alive | | false |

View File

@@ -65,5 +65,3 @@ After a successful parse of an event, the following fields are added:
| Message | STRING | The full event message | | Message | STRING | The full event message |
| Data | STRING | The binary data associated with the event | | Data | STRING | The binary data associated with the event |

View File

@@ -1,38 +1,50 @@
version: build_number_{build} version: build_number_{build}
configuration: Release configuration: Release
skip_tags: true skip_tags: true
init: init:
- ps: "$v = [regex]::match($env:APPVEYOR_REPO_BRANCH,'release/(.*)').Groups[1].Value\nWrite-Host \"On branch $($env:APPVEYOR_REPO_BRANCH)\"\nIF($v) { \n $env:VERSION_FROM_BRANCH = \"$($v).$($env:APPVEYOR_BUILD_NUMBER)\"\n} else {\n $env:VERSION_FROM_BRANCH = \"0.0.0.$($env:APPVEYOR_BUILD_NUMBER)\"\n}\nWrite-Host \"Set version to $($env:VERSION_FROM_BRANCH)\"" - ps: "$v = [regex]::match($env:APPVEYOR_REPO_BRANCH,'release/(.*)').Groups[1].Value\nWrite-Host \"On branch $($env:APPVEYOR_REPO_BRANCH)\"\nIF($v) { \n $env:VERSION_FROM_BRANCH = \"$($v).$($env:APPVEYOR_BUILD_NUMBER)\"\n} else {\n $env:VERSION_FROM_BRANCH = \"0.0.0.$($env:APPVEYOR_BUILD_NUMBER)\"\n}\nWrite-Host \"Set version to $($env:VERSION_FROM_BRANCH)\""
assembly_info: assembly_info:
patch: true patch: true
file: '**\AssemblyInfo.*' file: '**\AssemblyInfo.*'
assembly_version: $(VERSION_FROM_BRANCH) assembly_version: $(VERSION_FROM_BRANCH)
assembly_file_version: $(VERSION_FROM_BRANCH) assembly_file_version: $(VERSION_FROM_BRANCH)
assembly_informational_version: $(VERSION_FROM_BRANCH) assembly_informational_version: $(VERSION_FROM_BRANCH)
before_build: before_build:
- ps: >- - ps: >-
mkdir tools mkdir tools
NuGet.exe restore TimberWinR.sln NuGet.exe restore TimberWinR.sln
build: build:
verbosity: normal verbosity: normal
after_build: after_build:
- ps: >- - ps: >-
cat chocolateyInstall.ps1.template|%{$_-replace "\$\{version\}",$env:VERSION_FROM_BRANCH} > tools\chocolateyInstall.ps1 cat chocolateyInstall.ps1.template|%{$_-replace "\$\{version\}",$env:VERSION_FROM_BRANCH} > tools\chocolateyInstall.ps1
cat chocolateyUninstall.ps1.template|%{$_-replace "\$\{version\}",$env:VERSION_FROM_BRANCH} > tools\chocolateyUninstall.ps1 cat chocolateyUninstall.ps1.template|%{$_-replace "\$\{version\}",$env:VERSION_FROM_BRANCH} > tools\chocolateyUninstall.ps1
cat tools\chocolateyUninstall.ps1 cat tools\chocolateyUninstall.ps1
cat timberwinr.nuspec.template|%{$_-replace "\$\{version\}",$env:VERSION_FROM_BRANCH} > timberwinr.nuspec cat timberwinr.nuspec.template|%{$_-replace "\$\{version\}",$env:VERSION_FROM_BRANCH} > timberwinr.nuspec
choco pack timberwinr.nuspec choco pack timberwinr.nuspec
artifacts: artifacts:
- path: .\*.nupkg - path: .\*.nupkg
name: NuGet name: NuGet
- path: TimberWinR.ServiceHost\bin\*\*.dll - path: TimberWinR.ServiceHost\bin\*\*.dll
name: Dlls name: Dlls
- path: TimberWinR.ServiceHost\bin\*\*.exe - path: TimberWinR.ServiceHost\bin\*\*.exe
name: Exes name: Exes
- path: TimberWix\bin\*\*.msi - path: TimberWix\bin\*\*.msi
name: MSI name: MSI
deploy:
- provider: NuGet
server: https://chocolatey.org/
api_key:
secure: y8zhZTNm3PWLLxtKiMO79Shx3TyG3lnuGpJ6J7GT+2SihEspFxuBXz+WvmI6qzX+
skip_symbols: true
artifact: NuGet
on:
branch: /release/.*/
- provider: GitHub
release: $(VERSION_FROM_BRANCH)
auth_token:

View File

@@ -2,7 +2,7 @@
$fileType = 'msi' $fileType = 'msi'
$silentArgs = '/quiet' $silentArgs = '/quiet'
$scriptPath = $(Split-Path $MyInvocation.MyCommand.Path) $scriptPath = $(Split-Path $MyInvocation.MyCommand.Path)
$fileFullPath = Join-Path $scriptPath 'TimberWinR-${version}.0.msi' $fileFullPath = Join-Path $scriptPath 'TimberWinR-${version}.msi'
try { try {
Install-ChocolateyInstallPackage $packageName $fileType $silentArgs $fileFullPath Install-ChocolateyInstallPackage $packageName $fileType $silentArgs $fileFullPath
} catch { } catch {

View File

@@ -1,7 +1,7 @@
$packageName = 'TimberWinR-${version}' # arbitrary name for the package, used in messages $packageName = 'TimberWinR-${version}' # arbitrary name for the package, used in messages
$installerType = 'msi' #only one of these: exe, msi, msu $installerType = 'msi' #only one of these: exe, msi, msu
$scriptPath = $(Split-Path $MyInvocation.MyCommand.Path) $scriptPath = $(Split-Path $MyInvocation.MyCommand.Path)
$fileFullPath = Join-Path $scriptPath 'TimberWinR-${version}.0.msi' $fileFullPath = Join-Path $scriptPath 'TimberWinR-${version}.msi'
$silentArgs = '${PROJECTGUID} /quiet' $silentArgs = '${PROJECTGUID} /quiet'
$validExitCodes = @(0) #please insert other valid exit codes here, exit codes for ms http://msdn.microsoft.com/en-us/library/aa368542(VS.85).aspx $validExitCodes = @(0) #please insert other valid exit codes here, exit codes for ms http://msdn.microsoft.com/en-us/library/aa368542(VS.85).aspx
UnInstall-ChocolateyPackage "$packageName" "$installerType" "$silentArgs" "fileFullPath" -validExitCodes $validExitCodes UnInstall-ChocolateyPackage "$packageName" "$installerType" "$silentArgs" "fileFullPath" -validExitCodes $validExitCodes

View File

@@ -1,7 +1,7 @@
$packageName = 'TimberWinR-${version}' # arbitrary name for the package, used in messages $packageName = 'TimberWinR-${version}' # arbitrary name for the package, used in messages
$installerType = 'msi' #only one of these: exe, msi, msu $installerType = 'msi' #only one of these: exe, msi, msu
$scriptPath = $(Split-Path $MyInvocation.MyCommand.Path) $scriptPath = $(Split-Path $MyInvocation.MyCommand.Path)
$fileFullPath = Join-Path $scriptPath 'TimberWinR-${version}.0.msi' $fileFullPath = Join-Path $scriptPath 'TimberWinR-${version}.msi'
$silentArgs = '{E001D138-669B-4604-88C5-02C756461C15} /quiet' $silentArgs = '{E001D138-669B-4604-88C5-02C756461C15} /quiet'
$validExitCodes = @(0) #please insert other valid exit codes here, exit codes for ms http://msdn.microsoft.com/en-us/library/aa368542(VS.85).aspx $validExitCodes = @(0) #please insert other valid exit codes here, exit codes for ms http://msdn.microsoft.com/en-us/library/aa368542(VS.85).aspx
UnInstall-ChocolateyPackage "$packageName" "$installerType" "$silentArgs" "fileFullPath" -validExitCodes $validExitCodes UnInstall-ChocolateyPackage "$packageName" "$installerType" "$silentArgs" "fileFullPath" -validExitCodes $validExitCodes

View File

@@ -1,7 +1,7 @@
$packageName = 'TimberWinR-${version}' # arbitrary name for the package, used in messages $packageName = 'TimberWinR-${version}' # arbitrary name for the package, used in messages
$installerType = 'msi' #only one of these: exe, msi, msu $installerType = 'msi' #only one of these: exe, msi, msu
$scriptPath = $(Split-Path $MyInvocation.MyCommand.Path) $scriptPath = $(Split-Path $MyInvocation.MyCommand.Path)
$fileFullPath = Join-Path $scriptPath 'TimberWinR-${version}.0.msi' $fileFullPath = Join-Path $scriptPath 'TimberWinR-${version}.msi'
$silentArgs = '${PROJECTGUID} /quiet' $silentArgs = '${PROJECTGUID} /quiet'
$validExitCodes = @(0) #please insert other valid exit codes here, exit codes for ms http://msdn.microsoft.com/en-us/library/aa368542(VS.85).aspx $validExitCodes = @(0) #please insert other valid exit codes here, exit codes for ms http://msdn.microsoft.com/en-us/library/aa368542(VS.85).aspx
UnInstall-ChocolateyPackage "$packageName" "$installerType" "$silentArgs" "fileFullPath" -validExitCodes $validExitCodes UnInstall-ChocolateyPackage "$packageName" "$installerType" "$silentArgs" "fileFullPath" -validExitCodes $validExitCodes

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

View File

@@ -5,15 +5,15 @@
<!-- Read this before publishing packages to chocolatey.org: https://github.com/chocolatey/chocolatey/wiki/CreatePackages --> <!-- Read this before publishing packages to chocolatey.org: https://github.com/chocolatey/chocolatey/wiki/CreatePackages -->
<id>TimberWinR</id> <id>TimberWinR</id>
<title>TimberWinR</title> <title>TimberWinR</title>
<version>${version}.0</version> <version>${version}</version>
<authors>ethergreg</authors> <authors>efontana</authors>
<owners>Cimpress-MCP Infrastructure</owners> <owners>Eric Fontana</owners>
<summary>TimberWinR Shipper</summary> <summary>TimberWinR Shipper</summary>
<description>TimberWinR Native .NET Logstash Shipper. Use https://groups.google.com/forum/#!forum/timberwinr for support.</description> <description>TimberWinR Native .NET Logstash Shipper. Use https://groups.google.com/forum/#!forum/timberwinr for support.</description>
<projectUrl>https://github.com/Cimpress-MCP/TimberWinR</projectUrl> <projectUrl>https://github.com/Cimpress-MCP/TimberWinR</projectUrl>
<tags>TimberWinR admin</tags> <tags>TimberWinR admin</tags>
<copyright></copyright> <copyright></copyright>
<iconUrl>https://raw.githubusercontent.com/Cimpress-MCP/TimberWinR/master/timberwinr.jpg</iconUrl> <iconUrl>http://www.ericfontana.com/timberwinr.jpg</iconUrl>
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl> <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance> <requireLicenseAcceptance>false</requireLicenseAcceptance>
<dependencies> <dependencies>