FactorioSharp.Instrumentation 0.2.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package FactorioSharp.Instrumentation --version 0.2.2                
NuGet\Install-Package FactorioSharp.Instrumentation -Version 0.2.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FactorioSharp.Instrumentation" Version="0.2.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add FactorioSharp.Instrumentation --version 0.2.2                
#r "nuget: FactorioSharp.Instrumentation, 0.2.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install FactorioSharp.Instrumentation as a Cake Addin
#addin nuget:?package=FactorioSharp.Instrumentation&version=0.2.2

// Install FactorioSharp.Instrumentation as a Cake Tool
#tool nuget:?package=FactorioSharp.Instrumentation&version=0.2.2                

FactorioSharp.Instrumentation

Collect data from a Factorio server through an RCON connection and define meters that read the data. The data can then be fed to any OpenTelemetry exporter.

In order to keep the number of requests per second manageable, the collection of data from the server is rate-limited: in addition to specifying refresh rates on the different quantities that are measured, there is a master rate-limit that restricts the number of requests per second performed on the server.
The orchestration is performed by a background service that must be added to the host application.

Quick start

The RCON interface must be enabled when running factorio. It must also be secured using a password. Add the following parameters to the factorio launch command: --rcon-port 27015 --rcon-password factory

For example

bin\x64\factorio.exe --start-server saves/save.zip --rcon-port 27015 --rcon-password password

You should see a log message in the factorio console that looks like:

Info RemoteCommandProcessor.cpp:133: Starting RCON interface at IP ADDR:({0.0.0.0:27015})

The instrumentation can then be configured using the provided extension methods

Using the OpenTelemetry SDK

using FactorioSharp.Instrumentation.Meters;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;

const string serviceName = "Factorio";
const string serviceVersion = "1.1.104";

using MeterProvider MeterProvider = Sdk.CreateMeterProviderBuilder()
    .ConfigureResource(resource => resource.AddService(serviceName, serviceVersion))
    .AddFactorioInstrumentation("127.0.0.1", "password")
    .AddConsoleExporter()
    .Build();

Using the Hosting extensions

using FactorioSharp.Instrumentation.Meters;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;

const string serviceName = "Factorio";
const string serviceVersion = "1.1.104";

ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddSimpleConsole());

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Services.AddOpenTelemetry()
    .WithMetrics(
        metrics => metrics.ConfigureResource(resource => resource.AddService(serviceName, serviceVersion))
            .AddFactorioInstrumentation("127.0.0.1", "password", loggerFactory: loggerFactory)
            .AddConsoleExporter()
    );

IHost app = builder.Build();

app.Run();

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.3.6 112 4/14/2024
0.3.5 100 4/7/2024
0.3.4 100 4/7/2024
0.3.3 111 4/7/2024
0.3.2 118 4/7/2024
0.3.1 104 4/7/2024
0.3.0 110 4/7/2024
0.2.14 127 4/6/2024
0.2.13 109 4/6/2024
0.2.12 130 4/6/2024
0.2.11 105 4/6/2024
0.2.10 119 4/3/2024
0.2.9 118 4/2/2024
0.2.8 105 4/1/2024
0.2.6 102 4/1/2024
0.2.5 103 4/1/2024
0.2.4 119 4/1/2024
0.2.3 108 4/1/2024
0.2.2 104 3/31/2024
0.2.1 111 3/30/2024
0.2.0 100 3/30/2024
0.1.0 107 3/30/2024