1
0
Fork 0
mirror of https://github.com/postmannen/ctrl.git synced 2025-01-18 21:59:30 +00:00

metrics for processes, fixed up readme

This commit is contained in:
postmannen 2021-03-31 10:42:33 +02:00
parent 833ce66c00
commit fc04ea83bd
3 changed files with 9 additions and 5 deletions

View file

@ -14,7 +14,7 @@ A node can be a server running any host operating system, a container living in
## Inspiration ## Inspiration
The idea for how to handle processes, messages and errors are based on Joe Armstrongs idea behind Erlang described in his Thesis <https://erlang.org/download/armstrong_thesis_2003.pdf>. This does mean it is done in exactly the same way, but more on how I understood those ideas and implemented them using the Go programming language with NATS as the message broker to get a fully decoupled message passing system to handle processes. The idea for how to handle processes, messages and errors are based on Joe Armstrongs idea behind Erlang described in his Thesis <https://erlang.org/download/armstrong_thesis_2003.pdf>. This does not mean it is done in exactly the same way, but more on how I understood those ideas and implemented them using the Go programming language with NATS as the message broker to get a fully decoupled message passing system to handle processes.
## Why ## Why
@ -199,7 +199,7 @@ The start subscribers flags take a string value of which nodes that it will proc
```go ```go
// The node to send the message to // The node to send the message to
toNode toNode
// The Unique ID of the message // The actual data in the message
data data
// method, what is this message doing, etc. CLI, syslog, etc. // method, what is this message doing, etc. CLI, syslog, etc.
method method
@ -211,7 +211,7 @@ retries
requestTimeout requestTimeout
// The retries of the new message created via a request event. // The retries of the new message created via a request event.
requestRetries requestRetries
// Timeout for long a process should be allowed to operate // Timeout for how long a process should be allowed to operate
methodTimeout methodTimeout
``` ```

View file

@ -5,7 +5,7 @@ DefaultMessageRetries = 3
DefaultMessageTimeout = 5 DefaultMessageTimeout = 5
NodeName = "central" NodeName = "central"
ProfilingPort = "" ProfilingPort = ""
PromHostAndPort = "" PromHostAndPort = ":2112"
StartPubSayHello = 0 StartPubSayHello = 0
SubscribersDataFolder = "./data" SubscribersDataFolder = "./data"

View file

@ -50,6 +50,10 @@ func (s *server) ProcessesStart() {
proc := newProcess(s.processes, s.toRingbufferCh, s.configuration, sub, s.errorKernel.errorCh, processKindSubscriber, s.configuration.StartSubSayHello.Values, nil) proc := newProcess(s.processes, s.toRingbufferCh, s.configuration, sub, s.errorKernel.errorCh, processKindSubscriber, s.configuration.StartSubSayHello.Values, nil)
proc.procFuncCh = make(chan Message) proc.procFuncCh = make(chan Message)
// The reason for running the say hello subscriber as a procFunc is that
// a handler are not able to hold state, and we need to hold the state
// of the nodes we've received hello's from in the sayHelloNodes map,
// which is the information we pass along to generate metrics.
proc.procFunc = func() error { proc.procFunc = func() error {
sayHelloNodes := make(map[node]struct{}) sayHelloNodes := make(map[node]struct{})
for { for {
@ -60,7 +64,7 @@ func (s *server) ProcessesStart() {
sayHelloNodes[m.FromNode] = struct{}{} sayHelloNodes[m.FromNode] = struct{}{}
// update the prometheus metrics // update the prometheus metrics
s.metrics.metricsCh <- metricType{ proc.processes.metricsCh <- metricType{
metric: prometheus.NewGauge(prometheus.GaugeOpts{ metric: prometheus.NewGauge(prometheus.GaugeOpts{
Name: "hello_nodes", Name: "hello_nodes",
Help: "The current number of total nodes who have said hello", Help: "The current number of total nodes who have said hello",