ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π½Π° GRPC ΠΏΠΎΡΠΎΠΊ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΎΠΊ ΠΈ ΡΠ΅ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π· ΠΊΠ°Π½Π°Π»Ρ (pub/sub channels) Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ redis Π΄Π»Ρ ΡΠΎΡΠ³ΠΎΠ²ΡΡ Π±ΠΎΡΠΎΠ². ΠΡΠΊΡΡΡΡ Π±ΡΠΎΠΊΠ΅ΡΡΠΊΠΈΠΉ ΡΡΡΡ Π² T-Bank Open Investment API ΠΠΎΠ΄Π΄Π΅ΡΠΆΠ°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° - https://www.tinkoff.ru/rm/ostroumov.anatoliy2/4HFzm76801/
Π’Π΅ΡΡΠΎΠ²ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π·Π° 4 Π΄Π½Ρ.
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ (10 ΡΠ΅Π½ΡΡΠ±ΡΡ 2024 Π³ΠΎΠ΄Π°) Π±ΡΠΎΠΊΠ΅Ρ Π’-ΠΠ½Π²Π΅ΡΡΠΈΡΠΈΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΎΡΠ³Π°ΠΌ 9383 ΡΠΈΠΏΠΎΠ² Π°ΠΊΡΠΈΠΉ, 4745 ΠΎΠ±Π»ΠΈΠ³Π°ΡΠΈΠΉ, 2125 ΡΠΎΠ½Π΄ΠΎΠ², 38 Π²Π°Π»ΡΡ ΠΈ 1552 ΡΡΡΡΠ΅ΡΡΠΎΠ² ΠΈ Π½Π° ΠΊΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ. Open Investement API ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΆΡΡΡΠΊΠΈΠΌΠΈ Π»ΠΈΠΌΠΈΡΠ°ΠΌΠΈ - 300 ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ Π½Π° ΠΊΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° (ΠΈ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ IP Π°Π΄ΡΠ΅ΡΠ°).
ΠΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΡΠ³ΠΎΠ²ΡΡ
Π±ΠΎΡΠΎΠ², Ρ Ρ
ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ Π°ΠΊΡΠΈΠΉ (ΡΠ΅Π½Π° ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΡΠ΄Π΅Π»ΠΊΠΈ) ΡΠ΅ΡΠ΅Π· ΠΊΠ°Π½Π°Π»Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
redis. ΠΠ»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° Π»ΠΈΠΌΠΈΡΠ° Π² 300 ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ Ρ Ρ
ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
Ρ ΡΠ°Π·Π½ΡΡ
ΡΠ΅ΡΠ΅Π²ΡΡ
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ
ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ.
Π’ΠΎ Π΅ΡΡΡ, Ρ ΠΌΠΎΠ³Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠΊΠ΅Π½ secret1
ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΎΠ½Π΄ΠΎΠ² ΡΠ΅ΡΠ΅Π· Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ
Π°Π΄ΡΠ΅ΡΠΎΠΌ 192.168.12.2
, Π° ΠΊΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ Π°ΠΊΡΠΈΠΉ Ρ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ 192.168.12.3
ΠΏΠΎ ΡΠΎΠΊΠ΅Π½Ρ SECRET2
.
inputs:
- name: "etfs"
token: "<<<SECRET1>>>"
figis:
- "BBG333333333"
- ...
local_addr: "192.168.12.2"
- name: "stocks"
token: "<<<SECRET2>>>"
figis:
- "BBG004730RP0"
- "BBG00475KKY8"
- ...
local_addr: "192.168.12.3"
ΠΠ°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ (ΡΠ΅ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΎΠΊ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ GRPC ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ Π² ΠΊΠ°Π½Π°Π»Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ redis) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΠΎΠΉΡΠΈ Π»ΠΈΠΌΠΈΡΡ Π½Π° 300 ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ Ρ ΡΠΎΠΊΠ΅Π½Π°\IP Π°Π΄ΡΠ΅ΡΠ°, ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΊΠΎΠ΄ ΡΠΎΡΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠ±ΠΎΡΠ° (Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΡΠΈΡΡ GRPC ΠΊΠ»ΠΈΠ΅Π½Ρ), Ρ ΠΎΡΡ ΠΈ Π²Π½ΠΎΡΠΈΡ Π»Π°Π³ ΠΎΠΊΠΎΠ»ΠΎ 20 ΠΌΡ - ΡΡΠΎ, Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, ΡΠ΅ΡΠΏΠΈΠΌΠΎ Π΄Π»Ρ Π°Π»Π³ΠΎΡΡΠ΅ΠΉΠ΄ΠΈΠ½Π³Π°.
Π’Π°ΠΊΠΆΠ΅ Ρ Ρ ΠΎΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ systemd unit Π½Π° Cents 9 / Fedora 40 Server.
ΠΠ±ΡΠ°Π·Π΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ - stocks_broadcaster_example.yaml ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
input
ΠΠ°Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²Π²ΠΎΠ΄Π° - ΡΠΎΠΊΠ΅Π½ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ API, Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Π°Π΄ΡΠ΅Ρ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) ΠΈ FIGI ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π½Π° ΠΊΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ.
inputs:
- name: "etfs"
token: "<<<SECRET1>>>"
figis:
- "BBG333333333"
- ...
local_addr: "192.168.12.2"
- name: "stocks"
token: "<<<SECRET2>>>"
figis:
- "BBG004730RP0"
- "BBG00475KKY8"
- ...
instruments
ΠΠ°Π΄Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° ΠΈ ΡΠΎΡΠΌΠ°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠ»Π°ΡΡΡΡ Π² ΠΊΠ°Π½Π°Π»Ρ ΡΠ΅Π΄ΠΈΡΠ°.
instruments:
- figi: "BBG333333333"
name: "tmos"
channel: "stocks/tmos"
- figi: "BBG004730RP0"
name: "GAZP"
channel: "stocks/gazp"
- figi: "BBG00475KKY8"
name: "NVTK"
channel: "stocks/NVTK"
outputs
outputs:
- name: "container"
redis_url: "redis://127.0.0.1:6379" # syntax - https://pkg.go.dev/github.com/redis/go-redis/v9#ParseURL
ΠΠ°Π΄Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΡΡΡΠΎΠΊΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° redis, ΠΊΡΠ΄Π° Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ. Π€ΠΎΡΠΌΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ JSON Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ UTF-8
{
"name": "tmos", // as defined in `name`
"value": 5.73, // price of lot / ΡΠ΅Π½Π° Π»ΠΎΡΠ°
"error": "", // free form error message / ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠΈ
"timestamp":"Sun Aug 25 2024 01:06:23 GMT+0300"
}
ΠΠ»ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ channel
Π·Π°Π΄Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π°, ΠΊΡΠ΄Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΈΠΌΠ΅Ρ:
instruments:
- figi: "BBG004730RP0"
name: "GAZP"
channel: "stocks/gazp"
ΠΎΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
{
"name": "GAZP",
"value": 5.73,
"error": "",
"timestamp":"Sun Aug 25 2024 01:06:23 GMT+0300"
}
Π² ΠΊΠ°Π½Π°Π» stocks/gazp
.
log ΠΠ°Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ redis Π½Π° Ρ ΠΎΡΡ ΠΌΠ°ΡΠΈΠ½Π΅.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π½Π° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ Π»ΠΈΠ½ΡΠΊΡΠ΅ (tested on fedora 39+) Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°. Golang 1.22.0 ΠΈ GNU Make.
# install compiler tools
$ dnf install golang make redis
# install redis database on host machine
$ dnf install -y redis && systemctl enable --now redis
# ensure development tools in place
$ make tools
# ensure golang modules are installed
$ make deps
# start application for development using configuration from contrib/local.yaml
$ make start
# build production grade binary at `build/stocks_broadcaster`
$ make build
ΠΠ°Π·Π° Π΄Π°Π½Π½ΡΡ Redis ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π° ΡΠ΅ΡΠ΅Π· docker/podman.
# start development redis database
$ make docker/resource
$ make podman/resource
GNU Make, Docker engine with compose plugin should be installed. Installing golang toolchain on host machine is not required.
# start development databases and build and start application on http://localhost:3001
$ make docker/up
# start development databases
$ make docker/resource
# stop all
$ make docker/down
# prune all development environment
$ make docker/prune
Installing golang toolchain on host machine is not required. Tested on Fedora 39, 40 and Centos 9 Stream.
# install development environment
$ sudo dnf install make podman podman-compose podman-plugins containernetworking-plugins
# start development databases and build and start application on http://localhost:3001
$ make podman/up
# start development databases
$ make podman/resource
# stop all
$ make podman/down
# prune all development environment
$ make podman/prune
- ΠΠ°Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, Π²
contrib/local.yaml
- ΠΠ°ΠΏΡΡΡΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ (
make start
,make docker/up
ΠΈ Ρ.Π΄.) - ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ
redis
Ρ ΠΏΠΎΠΌΠΎΡΡΡredis-cli
ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρmonitor
- Π‘ΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΡΠ΅Π΄ΠΈΡΠ° - Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π²ΡΠ²ΠΎΠ·Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
publish
ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΎΠΊ Π² ΠΊΠ°Π½Π°Π»Ρ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΅ΡΠ»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΠΈΠ΄ΡΡ ΡΠΎΡΠ³ΠΈ Π°ΠΊΡΠΈΡΠΌΠΈ "ΠΠ°Π·ΠΏΡΠΎΠΌΠ°", ΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ:
vodolaz095@steel:~$ redis-cli monitor
OK
1731687168.592596 [0 127.0.0.1:39872] "publish" "stocks/gazp" "{\"name\":\"GAZP\",\"value\":133.25,\"error\":\"\",\"timestamp\":\"2024-11-15T16:12:48.397151Z\"}"
1731687168.592655 [0 127.0.0.1:39886] "publish" "stocks/gazp" "{\"name\":\"GAZP\",\"value\":133.25,\"error\":\"\",\"timestamp\":\"2024-11-15T16:12:48.397151Z\"}"
1731687169.099057 [0 127.0.0.1:39886] "publish" "stocks/gazp" "{\"name\":\"GAZP\",\"value\":133.27,\"error\":\"\",\"timestamp\":\"2024-11-15T16:12:48.882235Z\"}"
1731687169.099103 [0 127.0.0.1:39872] "publish" "stocks/gazp" "{\"name\":\"GAZP\",\"value\":133.27,\"error\":\"\",\"timestamp\":\"2024-11-15T16:12:48.882235Z\"}"
1731687170.635182 [0 127.0.0.1:39886] "publish" "stocks/gazp" "{\"name\":\"GAZP\",\"value\":133.28,\"error\":\"\",\"timestamp\":\"2024-11-15T16:12:50.443741Z\"}"
1731687170.635268 [0 127.0.0.1:39872] "publish" "stocks/gazp" "{\"name\":\"GAZP\",\"value\":133.28,\"error\":\"\",\"timestamp\":\"2024-11-15T16:12:50.443741Z\"}"
1731687170.635787 [0 127.0.0.1:39872] "publish" "stocks/NVTK" "{\"name\":\"NVTK\",\"value\":919.6,\"error\":\"\",\"timestamp\":\"2024-11-15T16:12:50.466195Z\"}"
1731687170.635985 [0 127.0.0.1:39886] "publish" "stocks/NVTK" "{\"name\":\"NVTK\",\"value\":919.6,\"error\":\"\",\"timestamp\":\"2024-11-15T16:12:50.466195Z\"}"
1731687171.352578 [0 127.0.0.1:39872] "publish" "stocks/gazp" "{\"name\":\"GAZP\",\"value\":133.26,\"error\":\"\",\"timestamp\":\"2024-11-15T16:12:51.179342Z\"}"
1731687171.352624 [0 127.0.0.1:39886] "publish" "stocks/gazp" "{\"name\":\"GAZP\",\"value\":133.26,\"error\":\"\",\"timestamp\":\"2024-11-15T16:12:51.179342Z\"}"
^C
- ΠΠ° ΡΡΠΎΠ²Π½Π΅ Π»ΠΎΠ³Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
debug
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ Π²ΡΠ²ΠΎΠ΄:
vodolaz095@steel:~/projects/stocks_broadcaster$ make start
go run main.go ./contrib/local.yaml
19:15:40 INF main.go:61 > Starting StockBroadcaster version development. GOOS: linux. ARCH: amd64. Go Version: go1.22.8. Please, report bugs here: https://github.com/vodolaz095/stocks_broadcaster/issues
19:15:40 INF main.go:77 > Reader etfs uses local address 192.168.47.9 to dial invest API
19:15:40 WRN main.go:150 > Systemd watchdog disabled - application can work unstable in systemd environment
19:15:40 DBG service_start.go:19 > Preparing to start reader 0 InvestAPI reader etfs...
19:15:40 DBG service_start.go:19 > Preparing to start reader 1 InvestAPI reader stocks...
19:15:40 DBG service_subscribe.go:16 > Creating subscription channel for writer 0 container1...
19:15:40 DBG service_subscribe.go:16 > Creating subscription channel for writer 1 container2...
19:15:40 TRC reader.go:97 > Reader InvestAPI reader stocks received: subscribe_last_price_response:{tracking_id:"61ac060fc2703aef8e3c7b48a6c40ab9" last_price_subscriptions:{figi:"BBG004730RP0" subscription_status:SUBSCRIPTION_STATUS_SUCCESS instrument_uid:"962e2a95-02a9-4171-abd7-aa198dbe643a" stream_id:"88a48d6e-7896-47cc-99ce-d8a3aff381b0" subscription_id:"5c50ec81-79ff-4d08-aafb-971d9cc51edf"} last_price_subscriptions:{figi:"BBG00475KKY8" subscription_status:SUBSCRIPTION_STATUS_SUCCESS instrument_uid:"0da66728-6c30-44c4-9264-df8fac2467ee" stream_id:"88a48d6e-7896-47cc-99ce-d8a3aff381b0" subscription_id:"303860b0-b5a6-41b0-b5a3-35fd02a92fce"}}
19:15:40 TRC reader.go:97 > Reader InvestAPI reader etfs received: subscribe_last_price_response:{tracking_id:"5527ca8063a72475382a677df49faf22" last_price_subscriptions:{figi:"BBG333333333" subscription_status:SUBSCRIPTION_STATUS_SUCCESS instrument_uid:"9654c2dd-6993-427e-80fa-04e80a1cf4da" stream_id:"7165bfb2-e045-47c3-aeec-23c2cbfa00c1" subscription_id:"5078900a-d949-4221-9bc3-0f2ddc9e0186"}}
19:15:41 TRC reader.go:97 > Reader InvestAPI reader stocks received: last_price:{figi:"BBG004730RP0" price:{units:133 nano:490000000} time:{seconds:1731687340 nanos:971043000} instrument_uid:"962e2a95-02a9-4171-abd7-aa198dbe643a" last_price_type:LAST_PRICE_EXCHANGE}
19:15:41 DBG reader.go:100 > Reader InvestAPI reader stocks: instrument BBG004730RP0 has last lot price 133.4900
19:15:43 TRC reader.go:97 > Reader InvestAPI reader stocks received: last_price:{figi:"BBG00475KKY8" price:{units:921 nano:800000000} time:{seconds:1731687343 nanos:433960000} instrument_uid:"0da66728-6c30-44c4-9264-df8fac2467ee" last_price_type:LAST_PRICE_EXCHANGE}
19:15:43 DBG reader.go:100 > Reader InvestAPI reader stocks: instrument BBG00475KKY8 has last lot price 921.8000
19:15:43 TRC reader.go:97 > Reader InvestAPI reader stocks received: last_price:{figi:"BBG00475KKY8" price:{units:922} time:{seconds:1731687343 nanos:611561000} instrument_uid:"0da66728-6c30-44c4-9264-df8fac2467ee" last_price_type:LAST_PRICE_EXCHANGE}
19:15:43 DBG reader.go:100 > Reader InvestAPI reader stocks: instrument BBG00475KKY8 has last lot price 922.0000
19:15:43 TRC reader.go:97 > Reader InvestAPI reader stocks received: last_price:{figi:"BBG004730RP0" price:{units:133 nano:500000000} time:{seconds:1731687343 nanos:586901000} instrument_uid:"962e2a95-02a9-4171-abd7-aa198dbe643a" last_price_type:LAST_PRICE_EXCHANGE}
19:15:43 DBG reader.go:100 > Reader InvestAPI reader stocks: instrument BBG004730RP0 has last lot price 133.5000
19:15:44 TRC reader.go:97 > Reader InvestAPI reader stocks received: last_price:{figi:"BBG00475KKY8" price:{units:921 nano:800000000} time:{seconds:1731687344 nanos:567429000} instrument_uid:"0da66728-6c30-44c4-9264-df8fac2467ee" last_price_type:LAST_PRICE_EXCHANGE}
19:15:44 DBG reader.go:100 > Reader InvestAPI reader stocks: instrument BBG00475KKY8 has last lot price 921.8000
19:15:45 TRC reader.go:97 > Reader InvestAPI reader stocks received: last_price:{figi:"BBG00475KKY8" price:{units:922} time:{seconds:1731687345 nanos:742633000} instrument_uid:"0da66728-6c30-44c4-9264-df8fac2467ee" last_price_type:LAST_PRICE_EXCHANGE}
19:15:45 DBG reader.go:100 > Reader InvestAPI reader stocks: instrument BBG00475KKY8 has last lot price 922.0000
19:15:45 TRC reader.go:97 > Reader InvestAPI reader etfs received: last_price:{figi:"BBG333333333" price:{units:5 nano:880000000} time:{seconds:1731687345 nanos:793230000} instrument_uid:"9654c2dd-6993-427e-80fa-04e80a1cf4da" last_price_type:LAST_PRICE_EXCHANGE}
19:15:45 DBG reader.go:100 > Reader InvestAPI reader etfs: instrument BBG333333333 has last lot price 5.8800
^C19:15:46 INF main.go:172 > Signal interrupt is received
19:15:46 INF reader.go:72 > Reader InvestAPI reader stocks is closing grpc subscription for 2 instruments
19:15:46 DBG reader.go:90 > Connection for InvestAPI reader stocks is canceled
19:15:46 DBG service_subscribe.go:24 > Closing subscription channel for writer 1 container2...
19:15:46 DBG service_start.go:91 > Closing broadcasting...
19:15:46 DBG service_subscribe.go:27 > Subscription channel for writer 1 container2 is closed
19:15:46 DBG reader.go:90 > Connection for InvestAPI reader etfs is canceled
19:15:46 DBG service_subscribe.go:24 > Closing subscription channel for writer 0 container1...
19:15:46 DBG service_subscribe.go:27 > Subscription channel for writer 0 container1 is closed
19:15:46 DBG service_start.go:34 > 2 readers are closing
19:15:46 INF reader.go:72 > Reader InvestAPI reader etfs is closing grpc subscription for 1 instruments
19:15:46 DBG service_close.go:18 > close: reader InvestAPI reader etfs is terminated
19:15:46 DBG service_close.go:18 > close: reader InvestAPI reader stocks is terminated
19:15:46 DBG service_close.go:28 > close: writer container1 is terminated
19:15:46 DBG service_close.go:28 > close: writer container2 is terminated
19:15:46 INF service_close.go:30 > close: system is stopped
19:15:46 INF main.go:196 > Stocks Broadcaster is terminated.
make: *** [Makefile:38: start] ΠΡΠΈΠ±ΠΊΠ° 1