Sample providers for the DStream data streaming platform, demonstrating external provider development using published SDK packages.
- π’ Counter Input Provider - Generates sample data for testing and development
- πΊ Console Output Provider - Displays streaming data with formatted output
- π³ Cross-platform OCI containers - Ready for production deployment
- π¦ Uses published NuGet packages - No local SDK dependencies required
- ποΈ Complete build system - Makefiles, Dockerfiles, and GitHub Actions
This repository demonstrates external provider development for the DStream ecosystem:
- β Consumes published SDK packages from nuget.org
- β Independent development - No dependency on SDK source code
- β Production-ready examples - Complete with build, test, and deployment automation
- β OCI container distribution - Cross-platform container images for deployment
- .NET 9.0 SDK
- Docker (for container builds)
- DStream CLI (from katasec/dstream)
dotnet add package Katasec.DStream.SDK.Core --version 0.1.1git clone https://github.com/katasec/dstream-providers.git
cd dstream-providers
# Build counter input provider
cd counter-input-provider
make build
make test
# Build console output provider
cd ../console-output-provider
make build
make test# Test input provider (generates 3 counter values)
echo '{"interval": 1000, "max_count": 3}' | ./counter-input-provider/bin/Release/net9.0/osx-x64/counter-input-provider
# Test output provider (processes sample data)
echo '{"outputFormat": "simple"}' | ./console-output-provider/bin/Release/net9.0/osx-x64/console-output-providerCreate a dstream.hcl file:
task "counter-to-console" {
type = "providers"
input {
provider_path = "./counter-input-provider/bin/Release/net9.0/osx-x64/counter-input-provider"
config = {
interval = 1000
max_count = 10
}
}
output {
provider_path = "./console-output-provider/bin/Release/net9.0/osx-x64/console-output-provider"
config = {
outputFormat = "structured"
}
}
}Run with DStream:
dstream run counter-to-consoleProviders are distributed as OCI artifacts (not Docker containers) via GitHub Container Registry:
# List available versions
./version.ps1 list
# Pull and inspect OCI artifacts using ORAS
oras pull ghcr.io/katasec/dstream-counter-input-provider:v0.1.0
oras pull ghcr.io/katasec/dstream-console-output-provider:v0.1.0Use with DStream:
task "oci-demo" {
type = "providers"
input {
provider_ref = "ghcr.io/katasec/dstream-counter-input-provider:v0.1.0"
config = { interval = 1000, max_count = 5 }
}
output {
provider_ref = "ghcr.io/katasec/dstream-console-output-provider:v0.1.0"
config = { outputFormat = "simple" }
}
}Providers follow semantic versioning (like Terraform and Pulumi):
# List current versions
./version.ps1
# Create new versions
./version.ps1 patch # v0.1.0 β v0.1.1 (bug fixes)
./version.ps1 minor # v0.1.0 β v0.2.0 (new features)
./version.ps1 major # v0.1.0 β v1.0.0 (breaking changes)
# Create custom version
./version.ps1 create v2.1.0
# Release both providers with single command
./release.ps1 patch # Auto-increment patch version
./release.ps1 -Tag v1.2.3 # Explicit versiondstream-providers/
βββ counter-input-provider/ # Input provider example
β βββ Program.cs # Provider implementation
β βββ CounterConfig.cs # Configuration model
β βββ CounterReader.cs # Business logic
β βββ Makefile # Build automation
β βββ Dockerfile # Container build
β βββ *.csproj # Uses NuGet packages
βββ console-output-provider/ # Output provider example
β βββ Program.cs # Provider implementation
β βββ ConsoleConfig.cs # Configuration model
β βββ ConsoleWriter.cs # Business logic
β βββ Makefile # Build automation
β βββ Dockerfile # Container build
β βββ *.csproj # Uses NuGet packages
βββ .github/workflows/ # CI/CD automation
β βββ build-and-test.yml # Build and test workflow
β βββ publish-containers.yml # Container publishing
βββ docker-compose.yml # Local development
βββ README.md # This file
# Build all providers
make build-all
# Test all providers
make test-all
# Build containers
make docker-build
# Run integration tests
make integration-test- Create new provider directory
- Add package reference:
<PackageReference Include="Katasec.DStream.SDK.Core" Version="0.1.1" />
- Implement provider interface:
public class MyProvider : ProviderBase<MyConfig>, IInputProvider { public async IAsyncEnumerable<Envelope> ReadAsync(IPluginContext ctx, CancellationToken ct) { // Your implementation } }
- Bootstrap in Program.cs:
await StdioProviderHost.RunInputProviderAsync<MyProvider, MyConfig>();
- DStream Main Repository: katasec/dstream
- DStream .NET SDK: katasec/dstream-dotnet-sdk
- NuGet Packages: Katasec.DStream.SDK.Core
- Provider Development Guide: Provider Development
This repository demonstrates the external provider development pattern. Contributions welcome:
- New provider examples - Show different use cases
- Improved build automation - Better CI/CD, cross-platform builds
- Documentation improvements - Help others understand the pattern
- Bug fixes - Issues with examples or build processes
MIT License - see LICENSE file for details.
Note: This repository demonstrates external provider development using published SDK packages. For SDK development itself, see katasec/dstream-dotnet-sdk.
DStream: Unix pipelines for data streaming π