Real-time HTTP Intrusion Detection

teler

teler

Kitabisa SecLab License made with Go Release Platform GitHub issues

Real-time HTTP Intrusion Detection
Contribute · What's new · Report Bug · Request Feature


teler is an real-time intrusion detection and threat alert based on web log that runs in a terminal with resources that we collect and provide by the community. ❤️

teler

Table of Contents

Features

  • Real-time: Analyze logs and identify suspicious activity in real-time.

  • Alerting: teler provides alerting when a threat is detected, push notifications include Slack, Telegram and Discord.

  • Monitoring: We've our own metrics if you want to monitor threats easily, and we use Prometheus for that.

  • Latest resources: Collections is continuously up-to-date.

  • Minimal configuration: You can just run it against your log file, write the log format and let teler analyze the log and show you alerts!

  • Flexible log formats: teler allows any custom log format string! It all depends on how you write the log format in configuration file.

  • Incremental log processing: Need data persistence rather than buffer stream? teler has the ability to process logs incrementally through the on-disk persistence options.

Why teler?

teler was designed to be a fast, terminal-based threat analyzer. Its core idea is to quickly analyze and hunt threats in real time!

Demo

Here is a preview of teler with conditions of use as:

Buffer-streams Incremental

Documentation

All related documentation about installation, usage & configuration is on our Wiki page.

Supporting Materials

Contributors

contributions

This project exists thanks to all the people who contribute. To learn how to setup a development environment and for contribution guidelines, see CONTRIBUTING.md.


Dwi Siswanto

💻 📖 ⚠️ 🤔

ProjectDiscovery

🔧

Anton Egorov

🔧

0ktavandi

🤔

Fik

🎨

fairyhunter13

⚠️

Zufar Dhiyaulhaq

💻

Aldin Setiawan

💻

Noah Petherbridge

🔧

Zackky Muhammad

🚇

Andy

🔧

Aliaksandr Valialkin

🔧

Markus Tenghamn

🐛

Rick

🚧 💻

Michael BOUVY

📖

oelnaggar

📖 🐛

Resources

All external resources used in this teler are NOT provided by us. See all peoples who involved in this resources at teler Resource Collections.

Pronunciation

/télér/ bagaimana bisa seorang pemuda itu teler hanya dengan meminum 1 sloki ciu (?)

Changes

For changes, see the CHANGELOG.md.

License

This program is free software: you can redistribute it and/or modify it under the terms of the Apache license. Kitabisa teler and any contributions are Copyright © by Dwi Siswanto 2020.

Stargazers over time

Comments
  • teler first beta release

    teler first beta release

    Descriptions

    Because Threat-Hunting was previously written in PHP and doesn't run multi-thread. process and/ concurrency, that making alert notifications NOT real-time; many delays are sent in next few hours :snail: (see #threat-alert channel). So, this tool to cut these weaknesses (as well as my first learning project in Go)! 🤸

    Motivation & Contexxxt

    Porting Threat-Hunting to Go!

    • Closes https://github.com/kitabisa/security-collections/issues/7 https://github.com/kitabisa/security-collections/issues/11 https://github.com/kitabisa/security-collections/issues/13 #1 #2

    Screenshots

    ▶ teler -h
    

    TODO

    See here.


    I hope to get feedback from reviewers. :bulb:

  • Add Telegram alerting

    Add Telegram alerting

    Summary

    • Add telegram alerting with markdown templating (issue https://github.com/kitabisa/teler/issues/36)
    • not support silent mode

    Proposed changes

    This PR fixes/implements the following bugs/features:

    • Add telegram alerting

    How has this been tested?

    configuring teler.yaml using telegram alert provider

    Proof:

    example logging in telegram

    ######################
    Warning: teler Alert
    ######################
    
     Crawler
    
    Request:  / HTTP/1.1
    Date:  +0700
    IP Address: ::1
    User Agent: curl/7.47.0
    Referrer: -
    Status code: 200
    Bytes sent: 5
    
    ######################
    Warning: teler Alert
    ######################
    
     Bruteforce
    
    Request:  /_private HTTP/1.1
    Date:  +0700
    IP Address: 127.0.0.1
    User Agent:  (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36
    Referrer: -
    Status code: 404
    Bytes sent: 580
    
    ######################
    Warning: teler Alert
    ######################
    
     Web Attack: Detects JavaScript location/document property access and window access obfuscation
    
    Request:  /?_=1%20AND%20%28SELECT%202000%20FROM%28SELECT%20COUNT%28%2A%29%2CCONCAT%280x716b786b71%2C%28SELECT%20%28ELT%282000%3D2000%2C1%29%29%29%2C0x716a707871%2CFLOOR%28RAND%280%29%2A2%29%29x%20FROM%20INFORMATION_SCHEMA.PLUGINS%20GROUP%20BY%20x%29a%29 HTTP/1.1
    Date:  +0700
    IP Address: ::1
    User Agent:  (http://sqlmap.org)
    Referrer: -
    Status code: 200
    Bytes sent: 160
    

    Closing issues

    Fixes #36

    Checklist:

    • [x] My code follows the code style of this project.
    • [x] My change requires a change to the documentation.
      • [x] I have updated the documentation accordingly.
    • [x] I have followed the guidelines in our CONTRIBUTING.md document.
    • [ ] I have written new tests for my changes.
      • [ ] My changes successfully ran and pass tests locally.
  • Add Exporters to Prometheus

    Add Exporters to Prometheus

    Summary

    • Add Exporters to Prometheus for monitoring in realtime and easy to analyze the log (#41)

    Proposed of changes

    This PR fixes/implements the following bugs/features:

    • Add Exporters to Prometheus

    How has this been tested?

    Add -m/--metrics parameter for Run as exporter Proof: example query in prometheus

    Closing issues

    Fixes #41

    Checklist:

    • [x] My code follows the code style of this project.
    • [x] My change requires a change to the documentation.
      • [x] I have updated the documentation accordingly.
    • [x] I have followed the guidelines in our CONTRIBUTING.md document.
    • [ ] I have written new tests for my changes.
      • [ ] My changes successfully ran and pass tests locally.
  • make -v option work

    make -v option work

    Proposed of changes

    This PR fixes #94

    Hi all:

    1. we use -ldflags "-X importpath.name=value" option to modify the value of the Version, and then when we type teler -v, the program just print the version we passed in, but I can't find a suitable way to modify the version variable defined in version, so I referenced this repository, and make a new directory versioninfo, define the Version varibale there. If you find a better way to modify the version, CORRECT ME!

    2. as the GoDoc says:

     -X importpath.name=value
    Set the value of the string variable in importpath named name to value.
    This is only effective if the variable is declared in the source code either uninitialized
    or initialized to a constant string expression. -X will not work if the initializer makes
    a function call or refers to other variables.
    Note that before Go 1.5 this option took two separate arguments.
    

    I found there is no variables GitCommit Environment BuildDate defined in source code, so there is no need to keep them and related variables.

    1. I added -ldflags "-s" in the Makefile, as the GoDoc says:
     -s  Omit the symbol table and debug information.
    

    this can make binary executable file smaller, we DON'T need the symbol table and debug information when delivering a binary release.

    to prove this, I'm doing the following on windows10 and using git-bash

    • with -ldflags "-s"
    /d/golang/src/github.com/kisielk/teler (master)
    $ make  build
    Building teler v1.0.1-29-g62623bc
    GOPATH=d:\golang
    go build -ldflags "-s -w  -X ktbs.dev/teler/versioninfo.Version=v1.0.1-29-g62623bc" -o ./bin/teler ./cmd/teler
    
    $ du -sh bin/teler
    12M     bin/teler
    
    • without -ldflags "-s"
     /d/golang/src/github.com/kisielk/teler (master)
    $ make  build
    Building teler v1.0.1-29-g62623bc
    GOPATH=d:\golang
    go build -ldflags "-w  -X ktbs.dev/teler/versioninfo.Version=v1.0.1-29-g62623bc" -o ./bin/teler ./cmd/teler
    
    $ du -sh bin/teler
    13M     bin/teler
    

    we save 1MB disk space!

  • simplify Dockerflie

    simplify Dockerflie

    IMPORTANT: Please do not create a Pull Request without creating an issue first!

    (Any change needs to be discussed before proceeding. Failure to do so may result in the rejection of the pull request).

    Summary

    Explains the information and/ motivation for making this changes...

    Proposed of changes

    This PR fixes/implements the following bugs/features:

    • Feature #78

    How has this been tested?

    Proof:

    Closing issues

    Fixes #78

    Checklist:

    • [x] My code follows the code style of this project.
    • [x] My change requires a change to the documentation.
      • [x] I have updated the documentation accordingly.
    • [x] I have followed the guidelines in our CONTRIBUTING.md document.
    • [x] I have written new tests for my changes.
      • [x] My changes successfully ran and pass tests locally.
  • Enhancement/add unit tests

    Enhancement/add unit tests

    IMPORTANT: Please do not create a Pull Request without creating an issue first!

    (Any change needs to be discussed before proceeding. Failure to do so may result in the rejection of the pull request).

    Summary

    Explains the information and/ motivation for making this changes...

    Adding partial unit tests on the matchers package

    Proposed of changes

    This PR fixes/implements the following bugs/features:

    • Write tests on issue #32

    How has this been tested?

    Proof:

    Running tool: C:\Go\bin\go.exe test -timeout 30s -coverprofile=C:\msys64\tmp\vscode-goKE6Jxj\go-code-cover ktbs.dev/teler/pkg/matchers -race -v
    
    === RUN   TestIsLogformat
    === RUN   TestIsLogformat/invalid_log_format
    [ERR] Error! Only validates log format; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsLogformat/no_$_sign
    [ERR] Error! Only validates log format; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsLogformat/nonexist_required_log_format
    [ERR] Error! Only validates log format; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsLogformat/valid_log_format
    --- PASS: TestIsLogformat (0.00s)
        --- PASS: TestIsLogformat/invalid_log_format (0.00s)
        --- PASS: TestIsLogformat/no_$_sign (0.00s)
        --- PASS: TestIsLogformat/nonexist_required_log_format (0.00s)
        --- PASS: TestIsLogformat/valid_log_format (0.00s)
    === RUN   TestIsToken
    === RUN   TestIsToken/invalid_token
    [ERR] Error! Only validates token; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsToken/valid_slack_token
    === RUN   TestIsToken/valid_telegram_token
    --- PASS: TestIsToken (0.00s)
        --- PASS: TestIsToken/invalid_token (0.00s)
        --- PASS: TestIsToken/valid_slack_token (0.00s)
        --- PASS: TestIsToken/valid_telegram_token (0.00s)
    === RUN   TestIsHexcolor
    === RUN   TestIsHexcolor/invalid_hex_color
    [ERR] Error! Only validates hex color; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsHexcolor/invalid_hex_syntax
    [ERR] Error! Only validates hex color; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsHexcolor/valid_hex_color
    --- PASS: TestIsHexcolor (0.00s)
        --- PASS: TestIsHexcolor/invalid_hex_color (0.00s)
        --- PASS: TestIsHexcolor/invalid_hex_syntax (0.00s)
        --- PASS: TestIsHexcolor/valid_hex_color (0.00s)
    === RUN   TestIsParseMode
    === RUN   TestIsParseMode/invalid_parse_mode
    [ERR] Error! Only validates parse mode [Markdown(v2), or HTML]; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsParseMode/outdated_markdown
    [ERR] Error! Only validates parse mode [Markdown(v2), or HTML]; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsParseMode/case_sensitive_invalid_html
    [ERR] Error! Only validates parse mode [Markdown(v2), or HTML]; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsParseMode/valid_markdown
    === RUN   TestIsParseMode/valid_html
    --- PASS: TestIsParseMode (0.00s)
        --- PASS: TestIsParseMode/invalid_parse_mode (0.00s)
        --- PASS: TestIsParseMode/outdated_markdown (0.00s)
        --- PASS: TestIsParseMode/case_sensitive_invalid_html (0.00s)
        --- PASS: TestIsParseMode/valid_markdown (0.00s)
        --- PASS: TestIsParseMode/valid_html (0.00s)
    === RUN   TestIsChannel
    === RUN   TestIsChannel/invalid_channel_format
    [ERR] Error! Only validates Slack channel; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsChannel/invalid_lowercase_channel_name
    [ERR] Error! Only validates Slack channel; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsChannel/valid_channel_format
    --- PASS: TestIsChannel (0.00s)
        --- PASS: TestIsChannel/invalid_channel_format (0.00s)
        --- PASS: TestIsChannel/invalid_lowercase_channel_name (0.00s)
        --- PASS: TestIsChannel/valid_channel_format (0.00s)
    === RUN   TestIsChatID
    === RUN   TestIsChatID/invalid_chat_id
    [ERR] Error! Only validates chat_id; please check your config file
    [INF] Use "-h" flag for more info about command.
    === RUN   TestIsChatID/digit_chat_id
    --- PASS: TestIsChatID (0.00s)
        --- PASS: TestIsChatID/invalid_chat_id (0.00s)
        --- PASS: TestIsChatID/digit_chat_id (0.00s)
    PASS
    coverage: 100.0% of statements
    ok  	ktbs.dev/teler/pkg/matchers	1.052s	coverage: 100.0% of statements
    

    Closing issues

    Checklist:

    • [x] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
      • [ ] I have updated the documentation accordingly.
    • [x] I have followed the guidelines in our CONTRIBUTING.md document.
    • [x] I have written new tests for my changes.
      • [x] My changes successfully ran and pass tests locally.
  • [BUG][ASK] : teller can not be run message

    [BUG][ASK] : teller can not be run message "analyzing" appears

    Describe the bug

    when I run the command tail -f /var/log/apache2/access.log | teler -c /var/www/html/teler/teler.yaml -x 25 but the response from teler analyzing is not complete

    To Reproduce

    Steps to reproduce the behavior:

    tail -f /var/log/apache2/access.log | teler -c /var/www/html/teler/teler.yaml -x 25

    # To write log format, see https://github.com/kitabisa/teler#configuration
    log_format: |
      $remote_addr - [$remote_addr] $remote_user - [$time_local] 
      "$request_method $request_uri $request_protocol" $status $body_bytes_sent 
      "$http_referer" "$http_user_agent" $request_length $request_time 
      [$proxy_upstream_name] $upstream_addr $upstream_response_length $upstream_response_time $upstream_status $req_id
    rules:
      cache: true
      threat:
        excludes:
          - "Common Web Attack"
          - "CVE"
          - "Bad IP Address"
          - "Bad Referrer"
          - "Bad Crawler"
          - "Directory Bruteforce"
    
        # It can be user-agent, request path, HTTP referrer, IP address and/or request query values parsed in regExp
        whitelists:
          # - "(curl|Go-http-client|okhttp)/*"
          # - "^/wp-login\\.php"
          # - "https://www\\.facebook\\.com"
          # - "192\\.168\\.0\\.1"
    
    # prometheus:
      # active: false
      # host: "localhost"
      # port: 9099
      # endpoint: "/metrics"
    
    alert:
      active: true
      provider: "slack"
    
    notifications:
      slack:
        token: "xxxxxxxxxx"
        color: "#ffd21a"
        channel: "teler"
    
     # telegram:
       # token: "123456:ABC-DEF1234...-..."
       # chat_id: "-111000"
    
     # discord:
       # token: "NkWkawkawkawkawka.X0xo.n-kmZwA8aWAA"
       # color: "16312092"
       # channel: "700000000000000..."
    

    Screenshots

    https://drive.google.com/file/d/1vvbFHk9e-AVJgzUhIeaLynskmG24jYeT/view?usp=sharing

    Environment (please complete the following information):

    • OS: linux
    • OS version: Linux kali 5.7.0-kali1-amd54 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    • teler Version : teler 1.0.1
  • Fix Docker image name in documentation

    Fix Docker image name in documentation

    Summary

    See #117

    Proposed of changes

    This PR fixes Docker image name in README.

    How has this been tested?

    Locally using appropriate docker run commands.

    Closing issues

    Fixes #117

    Checklist:

    • [x] My change requires a change to the documentation.
      • [x] I have updated the documentation accordingly.
    • [x] I have followed the guidelines in our CONTRIBUTING.md document.
  • [FEATURE] Add Exporters to Prometheus

    [FEATURE] Add Exporters to Prometheus

    Is your feature request related to a problem? Please describe. add exporters in teler, so we can get a statistical data

    Describe the solution you'd like N/A

    Describe alternatives you've considered N/A

    Additional context N/A

  • [BUG] panic: fatal error: concurrent map iteration and map write

    [BUG] panic: fatal error: concurrent map iteration and map write

    Describe the bug

    fatal error: concurrent map iteration and map write

    To Reproduce

    Steps to reproduce the behavior:

    run this a couple of times on a logfile with no issues:

    tail /var/log/httpd/domains/example.com.log | ./teler -c teler.yml
    

    result

    fatal error: concurrent map iteration and map write
    
    goroutine 27 [running]:
    runtime.throw(0x86a1c18, 0x26)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/runtime/panic.go:1116 +0x6a fp=0xa4b8c74 sp=0xa4b8c60 pc=0x807821a
    runtime.mapiternext(0xa4b8edc)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/runtime/map.go:853 +0x481 fp=0xa4b8cbc sp=0xa4b8c74 pc=0x80550b1
    runtime.mapiterinit(0x85dc6a0, 0xa5084a0, 0xa4b8edc)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/runtime/map.go:843 +0x189 fp=0xa4b8cc8 sp=0xa4b8cbc pc=0x8054b49
    ktbs.dev/teler/pkg/teler.Analyze(0xa50f440, 0xa40e120, 0x0, 0x8050ebf)
    	/home/runner/work/teler/teler/pkg/teler/teler.go:32 +0x2c0 fp=0xa4b8f10 sp=0xa4b8cc8 pc=0x8547fd0
    ktbs.dev/teler/internal/runner.New.func3.1(0xa5800a0, 0xa50f440, 0x0, 0xa502158, 0xa40e120)
    	/home/runner/work/teler/teler/internal/runner/runner.go:72 +0x72 fp=0xa4b8fd8 sp=0xa4b8f10 pc=0x8551652
    runtime.goexit()
    	/opt/hostedtoolcache/go/1.14.15/x64/src/runtime/asm_386.s:1337 +0x1 fp=0xa4b8fdc sp=0xa4b8fd8 pc=0x80a40b1
    created by ktbs.dev/teler/internal/runner.New.func3
    	/home/runner/work/teler/teler/internal/runner/runner.go:69 +0x93
    
    goroutine 1 [chan receive]:
    github.com/satyrius/gonx.(*Reader).Read(0xa48df84, 0xa48df40, 0x0, 0x0)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/reader.go:41 +0x3f
    ktbs.dev/teler/internal/runner.New(0xa50f440)
    	/home/runner/work/teler/teler/internal/runner/runner.go:126 +0x3fc
    main.main()
    	/home/runner/work/teler/teler/cmd/teler/main.go:20 +0x1f
    
    goroutine 35 [syscall]:
    os/signal.signal_recv(0x0)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/runtime/sigqueue.go:147 +0x12f
    os/signal.loop()
    	/opt/hostedtoolcache/go/1.14.15/x64/src/os/signal/signal_unix.go:23 +0x1a
    created by os/signal.Notify.func1
    	/opt/hostedtoolcache/go/1.14.15/x64/src/os/signal/signal.go:127 +0x33
    
    goroutine 22 [chan receive]:
    ktbs.dev/teler/internal/runner.New.func2(0xa5ae080, 0xa50c200, 0xa49c01c)
    	/home/runner/work/teler/teler/internal/runner/runner.go:57 +0x2d
    created by ktbs.dev/teler/internal/runner.New
    	/home/runner/work/teler/teler/internal/runner/runner.go:56 +0x246
    
    goroutine 23 [chan receive]:
    ktbs.dev/teler/internal/runner.New.func3(0xa50c200, 0xa5800a0, 0xa50f440, 0x0, 0xa502158)
    	/home/runner/work/teler/teler/internal/runner/runner.go:67 +0xa7
    created by ktbs.dev/teler/internal/runner.New
    	/home/runner/work/teler/teler/internal/runner/runner.go:66 +0x312
    
    goroutine 24 [semacquire]:
    sync.runtime_Semacquire(0xa42a0a8)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/runtime/sema.go:56 +0x36
    sync.(*WaitGroup).Wait(0xa42a0a0)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/sync/waitgroup.go:130 +0x7c
    github.com/satyrius/gonx.MapReduce.func1(0xa432180, 0x8775d10, 0xa40c090, 0xa5055c0, 0xa)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:67 +0x104
    created by github.com/satyrius/gonx.MapReduce
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:26 +0x96
    
    goroutine 25 [chan receive]:
    github.com/satyrius/gonx.(*ReadAll).Reduce(0x8bc038c, 0xa5055c0, 0xa4321c0)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/reducer.go:23 +0x57
    created by github.com/satyrius/gonx.MapReduce
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:73 +0xe1
    
    goroutine 38 [runnable]:
    regexp/syntax.(*compiler).inst(...)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/regexp/syntax/compile.go:173
    regexp/syntax.Compile(0xa5ae400, 0xa5ae400, 0x2, 0x2)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/regexp/syntax/compile.go:84 +0x186
    regexp.compile(0x868de83, 0x9, 0x80000d4, 0x85dc7e0, 0xa5086e0, 0x868d034)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/regexp/regexp.go:178 +0x9f
    regexp.Compile(...)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/regexp/regexp.go:133
    regexp.MustCompile(0x868de83, 0x9, 0xa5120e0)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/regexp/regexp.go:309 +0x39
    ktbs.dev/teler/pkg/matchers.IsMatch(0x868de83, 0x9, 0xa5fc2ae, 0x3, 0xa550200)
    	/home/runner/work/teler/teler/pkg/matchers/regex.go:10 +0x4b
    ktbs.dev/teler/pkg/teler.Analyze(0xa50f440, 0xa502180, 0x1, 0x8050ebf)
    	/home/runner/work/teler/teler/pkg/teler/teler.go:212 +0x1ae1
    ktbs.dev/teler/internal/runner.New.func3.1(0xa5800a0, 0xa50f440, 0x0, 0xa502158, 0xa502180)
    	/home/runner/work/teler/teler/internal/runner/runner.go:72 +0x72
    created by ktbs.dev/teler/internal/runner.New.func3
    	/home/runner/work/teler/teler/internal/runner/runner.go:69 +0x93
    
    goroutine 7 [runnable]:
    github.com/satyrius/gonx.MapReduce.func1.1(0xa42a0a0, 0xa432180, 0xa546000, 0x8775d10, 0xa40c090, 0xa5055c0)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:46 +0x66
    created by github.com/satyrius/gonx.MapReduce.func1
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:43 +0xd6
    
    goroutine 8 [runnable]:
    github.com/satyrius/gonx.MapReduce.func1.1(0xa42a0a0, 0xa432180, 0xa546000, 0x8775d10, 0xa40c090, 0xa5055c0)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:46 +0x66
    created by github.com/satyrius/gonx.MapReduce.func1
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:43 +0xd6
    
    goroutine 9 [runnable]:
    github.com/satyrius/gonx.MapReduce.func1.1(0xa42a0a0, 0xa432180, 0xa546000, 0x8775d10, 0xa40c090, 0xa5055c0)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:46 +0x66
    created by github.com/satyrius/gonx.MapReduce.func1
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:43 +0xd6
    
    goroutine 10 [runnable]:
    github.com/satyrius/gonx.(*Entry).SetField(...)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/entry.go:50
    github.com/satyrius/gonx.(*Parser).ParseString(0xa40c090, 0xa5fc6c0, 0x115, 0x0, 0x0, 0x0)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/parser.go:46 +0xf7
    github.com/satyrius/gonx.MapReduce.func1.1(0xa42a0a0, 0xa432180, 0xa546000, 0x8775d10, 0xa40c090, 0xa5055c0)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:53 +0x97
    created by github.com/satyrius/gonx.MapReduce.func1
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:43 +0xd6
    
    goroutine 11 [runnable]:
    github.com/satyrius/gonx.MapReduce.func1.1(0xa42a0a0, 0xa432180, 0xa546000, 0x8775d10, 0xa40c090, 0xa5055c0)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:46 +0x66
    created by github.com/satyrius/gonx.MapReduce.func1
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:43 +0xd6
    
    goroutine 12 [runnable]:
    github.com/satyrius/gonx.MapReduce.func1.1(0xa42a0a0, 0xa432180, 0xa546000, 0x8775d10, 0xa40c090, 0xa5055c0)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:46 +0x66
    created by github.com/satyrius/gonx.MapReduce.func1
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:43 +0xd6
    
    goroutine 13 [runnable]:
    github.com/satyrius/gonx.MapReduce.func1.1(0xa42a0a0, 0xa432180, 0xa546000, 0x8775d10, 0xa40c090, 0xa5055c0)
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:46 +0x66
    created by github.com/satyrius/gonx.MapReduce.func1
    	/home/runner/go/pkg/mod/github.com/satyrius/[email protected]/mapreduce.go:43 +0xd6
    
    goroutine 16 [runnable]:
    reflect.(*structType).FieldByName(0x85fa060, 0x868ca05, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/reflect/type.go:1343 +0x23c
    reflect.(*rtype).FieldByName(0x85fa060, 0x868ca05, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/reflect/type.go:936 +0x6f
    reflect.Value.FieldByName(0x85fa060, 0xa47e000, 0x199, 0x868ca05, 0x6, 0x199, 0x8050d14, 0xa)
    	/opt/hostedtoolcache/go/1.14.15/x64/src/reflect/value.go:888 +0x66
    ktbs.dev/teler/pkg/teler.Analyze(0xa50f440, 0xa47e000, 0x0, 0x8050ebf)
    	/home/runner/work/teler/teler/pkg/teler/teler.go:23 +0xdb
    ktbs.dev/teler/internal/runner.New.func3.1(0xa5800a0, 0xa50f440, 0x0, 0xa502158, 0xa47e000)
    	/home/runner/work/teler/teler/internal/runner/runner.go:72 +0x72
    created by ktbs.dev/teler/internal/runner.New.func3
    	/home/runner/work/teler/teler/internal/runner/runner.go:69 +0x93
    
  • Add Docker Hub workflow

    Add Docker Hub workflow

    IMPORTANT: Please do not create a Pull Request without creating an issue first!

    (Any change needs to be discussed before proceeding. Failure to do so may result in the rejection of the pull request).

    Summary

    Add auto push & build Docker images to Docker Hub workflow which will trigger when every new release is created & published.

    Proposed of changes

    • Update Dockerfile
    • Build and Push Docker images GitHub workflow
    • Fix SIGSEGV of syscall within Docker container (ec60820)

    How has this been tested?

    Proof:

    Closing issues

    Fixes #

    Checklist:

    • [x] My code follows the code style of this project.
    • [x] My change requires a change to the documentation.
      • [x] I have updated the documentation accordingly.
    • [x] I have followed the guidelines in our CONTRIBUTING.md document.
    • [x] I have written new tests for my changes.
      • [x] My changes successfully ran and pass tests locally.
  • build(deps): bump golang.org/x/text from 0.3.7 to 0.6.0

    build(deps): bump golang.org/x/text from 0.3.7 to 0.6.0

    Bumps golang.org/x/text from 0.3.7 to 0.6.0.

    Commits
    • ec5565b README.md: update documentation of module versioning
    • c8236a6 unicode/bidi: remove unused global
    • ada7473 all: remove redundant type conversion
    • 1bdb400 language: remove compatibility with go < 1.2
    • 252bee0 go.mod: ignore cyclic dependency for tagging
    • ecab6e5 go.mod: ignore cyclic dependency for tagging
    • 369c86b all: fix a few function names on comments
    • 434eadc language: reject excessively large Accept-Language strings
    • 23407e7 go.mod: ignore cyclic dependency for tagging
    • b18d3dd secure/precis: replace bytes.Compare with bytes.Equal
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump github.com/valyala/fastjson from 1.6.3 to 1.6.4

    build(deps): bump github.com/valyala/fastjson from 1.6.3 to 1.6.4

    Bumps github.com/valyala/fastjson from 1.6.3 to 1.6.4.

    Commits
    • 93f67d9 fastfloat: localize handling of invalid number without integer and fractional...
    • 6f52d1b fastfloat: support elided integer or float part (#84)
    • 6dae91c Fix 64-bit tests on 32-bit systems (#60)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump github.com/briandowns/spinner from 1.18.1 to 1.20.0

    build(deps): bump github.com/briandowns/spinner from 1.18.1 to 1.20.0

    Bumps github.com/briandowns/spinner from 1.18.1 to 1.20.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump github.com/slack-go/slack from 0.8.2 to 0.12.1

    build(deps): bump github.com/slack-go/slack from 0.8.2 to 0.12.1

    Bumps github.com/slack-go/slack from 0.8.2 to 0.12.1.

    Release notes

    Sourced from github.com/slack-go/slack's releases.

    v0.12.1

    What's Changed

    Enhancements

    New Contributors

    Full Changelog: https://github.com/slack-go/slack/compare/v0.12.0...v0.12.1

    v0.12.0

    Thank you for all the contributions!

    What's Changed

    This release contains several backward incompatible changes.

    Fixes

    Enhancements

    New Contributors

    Full Changelog: https://github.com/slack-go/slack/compare/v0.11.4...v0.12.0

    v0.11.4

    What's Changed

    Enhancements

    ... (truncated)

    Commits
    • beca00a Merge pull request #1148 from slack-go/large-files-upload-timeout
    • bddec0a refactor FileUploadV2 implementation
    • c0676fc Merge pull request #1119 from stephenwan-opal/master
    • 617bdc1 Merge pull request #989 from Yohan460/include_num_members-support
    • 58dcbfd Merge pull request #1131 from yokishava/fix/rich-text-timestamp
    • acafae8 Merge pull request #1143 from johanmcos/add-GetOtherTeamInfoContext
    • d778e9e add GetOtherTeamInfoContext method
    • f50586f Merge pull request #1097 from MattDavisRV/CustomProfileField_Update
    • 5a47d3e Merge pull request #1095 from grimmy/expose-reactions
    • c857464 Merge pull request #1140 from ameliagapin/email_url_elements
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump github.com/panjf2000/ants/v2 from 2.5.0 to 2.7.1

    build(deps): bump github.com/panjf2000/ants/v2 from 2.5.0 to 2.7.1

    Bumps github.com/panjf2000/ants/v2 from 2.5.0 to 2.7.1.

    Release notes

    Sourced from github.com/panjf2000/ants/v2's releases.

    Ants v2.7.0

    Changelogs

    🛩 Enhancements

    • opt: cache current time for workders and update it periodically (#261)

    Performance improvement:

    goos: darwin
    goarch: arm64
    pkg: github.com/panjf2000/ants/v2
    

    name old time/op new time/op delta AntsPool-10 771ms ± 9% 669ms ± 6% -13.29% (p=0.000 n=10+10)

    name old alloc/op new alloc/op delta AntsPool-10 23.0MB ± 5% 23.0MB ± 4% ~ (p=0.968 n=10+9)

    name old allocs/op new allocs/op delta AntsPool-10 1.10M ± 1% 1.10M ± 1% ~ (p=0.182 n=10+9)

    Full Changelog: https://github.com/panjf2000/ants/compare/v2.6.0...v2.7.0

    Thanks to all these contributors: @​panjf2000 for making this release possible.

    Ants v2.6.0

    Features

    Add option to turn off automatically purge (#253) b604f7dc644656e4870d1ddbcbe7318155a9bd21

    Commits
    • 88d2454 fix: resolve the build failures
    • b6eaea1 opt: refine some code
    • 858f91f chore: code cleanup
    • 4e0cb8c chore: don't start workflow to scan code when there is no code changes
    • b1b2df0 chore: fix the broken build status icon
    • 23c4f48 fix: exit ticktock goroutine when pool is closed
    • 3fbd956 opt: leverage binary-search algorithm to speed up PoolWithFunc.purgeStaleWork...
    • 7b1e246 chore: add errorgroup for benchmark
    • 846d76a opt: cache current time for workders and update it periodically
    • 03011bc chore: add release-drafter action
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump actions/stale from 6 to 7

    build(deps): bump actions/stale from 6 to 7

    Bumps actions/stale from 6 to 7.

    Release notes

    Sourced from actions/stale's releases.

    v7.0.0

    ⚠️ This version contains breaking changes ⚠️

    What's Changed

    Breaking Changes

    • In this release we prevent this action from managing the stale label on items included in exempt-issue-labels and exempt-pr-labels
    • We decided that this is outside of the scope of this action, and to be left up to the maintainer

    New Contributors

    Full Changelog: https://github.com/actions/stale/compare/v6...v7.0.0

    v6.0.1

    Update @​actions/core to 1.10.0 #839

    Full Changelog: https://github.com/actions/stale/compare/v6.0.0...v6.0.1

    Changelog

    Sourced from actions/stale's changelog.

    Changelog

    [7.0.0]

    :warning: Breaking change :warning:

    [6.0.1]

    Update @​actions/core to v1.10.0 (#839)

    [6.0.0]

    :warning: Breaking change :warning:

    Issues/PRs default close-issue-reason is now not_planned(#789)

    [5.1.0]

    Don't process stale issues right after they're marked stale [Add close-issue-reason option]#764#772 Various dependabot/dependency updates

    4.1.0 (2021-07-14)

    Features

    4.0.0 (2021-07-14)

    Features

    Bug Fixes

    • dry-run: forbid mutations in dry-run (#500) (f1017f3), closes #499
    • logs: coloured logs (#465) (5fbbfba)
    • operations: fail fast the current batch to respect the operations limit (#474) (5f6f311), closes #466
    • label comparison: make label comparison case insensitive #517, closes #516
    • filtering comments by actor could have strange behavior: "stale" comments are now detected based on if the message is the stale message not who made the comment(#519), fixes #441, #509, #518

    Breaking Changes

    ... (truncated)

    Commits
    • 6f05e42 draft release for v7.0.0 (#888)
    • eed91cb Update how stale handles exempt items (#874)
    • 10dc265 Merge pull request #880 from akv-platform/update-stale-repo
    • 9c1eb3f Update .md files and allign build-test.yml with the current test.yml
    • bc357bd Update .github/workflows/release-new-action-version.yml
    • 690ede5 Update .github/ISSUE_TEMPLATE/bug_report.md
    • afbcabf Merge branch 'main' into update-stale-repo
    • e364411 Update name of codeql.yml file
    • 627cef3 fix print outputs step (#859)
    • 975308f Merge pull request #876 from jongwooo/chore/use-cache-in-check-dist
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
A LoRaWAN nodes' and network simulator that works with a real LoRaWAN environment (such as Chirpstack) and equipped with a web interface for real-time interaction.
A LoRaWAN nodes' and network simulator that works with a real LoRaWAN environment (such as Chirpstack) and equipped with a web interface for real-time interaction.

LWN Simulator A LoRaWAN nodes' simulator to simulate a LoRaWAN Network. Table of Contents General Info Requirements Installation General Info LWN Simu

Nov 20, 2022
Generate HTTP load and plot the results in real-time
Generate HTTP load and plot the results in real-time

ali A load testing tool capable of performing real-time analysis, inspired by vegeta and jplot. ali comes with an embedded terminal-based UI where you

Jan 6, 2023
A Realtime API Gateway used with NATS to build REST, real time, and RPC APIs, where all your clients are synchronized seamlessly.
A Realtime API Gateway used with NATS to build REST, real time, and RPC APIs, where all your clients are synchronized seamlessly.

Realtime API Gateway Synchronize Your Clients Visit Resgate.io for guides, live demos, and resources. Resgate is a Go project implementing a realtime

Dec 31, 2022
Walrus 🕑 Real-time event streaming platform built on top of gRPC streams
Walrus 🕑 Real-time event streaming platform built on top of gRPC streams

Walrus ?? Real-time event streaming platform built on top of gRPC streams Table of Contents About the project Built With How it works Getting Started

Sep 24, 2022
Schema-free, document-oriented streaming database that optimized for monitoring network traffic in real-time

Basenine Schema-free, document-oriented streaming database that optimized for monitoring network traffic in real-time. Featured Aspects Has the fastes

Nov 2, 2022
PinGo is a standalone and feature-rich tool for common IP-based reachability checking tasks. Ping or Trace and Observe in real-time the statistics.

pingo As a network champion from designing and implementing to troubleshooting large scale networks - I know that is usually not easy for administrato

Sep 26, 2022
SubCenter is a middleware that integrate task subscriptions and real-time push

Subscription Center SubCenter是一个集成各种任务并进行实时推送的中间件,本身不提供数据与推送服务。

Oct 31, 2022
Go-random-chat - Fast and scalable real-time random chat written in go
Go-random-chat - Fast and scalable real-time random chat written in go

Go Random Chat Fast and scalable real-time random chat written in go. Features:

Dec 21, 2022
Go http real ip header parser

remoteaddr Go http real ip header parser module A forwarders such as a reverse proxy or Cloudflare find the real IP address from the requests made to

Nov 18, 2022
A tool for IDN homograph attacks and detection.

Ditto is a small tool that accepts a domain name as input and generates all its variants for an homograph attack as output, checking which ones are av

Dec 26, 2022
A discord server guard which uses emojis and bot detection (WIP)

server-guard A discord server guard which uses emojis and bot detection (WIP) Config options SusLevel: how many checks the account has to fail before

Dec 4, 2022
Simple reverse shell to avoid Windows defender and kaspersky detection
Simple reverse shell to avoid Windows defender and kaspersky detection

Windows-ReverseShell Simple reverse shell to avoid Windows defender, kaspersky d

Oct 19, 2022
Memberlist - Golang package for gossip based membership and failure detection

memberlist memberlist 是一个 Go 库,它使用基于 gossip 的协议来管理集群成员和成员故障检测。 这种库的用例影响深远:所有分布式系

Jan 26, 2022
Ephemeral One Time/Build-Time gRPC TLS PKI system.

PkiSauce Ephemeral Build Time TLS PKI saucing for your intra services GRPC (or not) communications. Description A simple attempt to avoid deploying co

Jul 4, 2022
Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator
Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator

Trickster is an HTTP reverse proxy/cache for http applications and a dashboard query accelerator for time series databases. Learn more below, and chec

Jan 2, 2023
Lightweight http response time based load balancer written in Go

HTTP Load Balancer Specifications http servers should always return time taken to proceed request in headers as EXECUTION_TIME in ms this load balance

Feb 22, 2022
Demo of EdgeX Foundry Ireland (or Jakarta) release with real Modbus, SNMP and GPIO pin devices

Ireland Demo This demo shows the Ireland (or Jakarta - it works for both) release of EdgeX with the following devices: Comet Systems T0310 temperature

Nov 6, 2021