Git Product home page Git Product logo

notifiarr's Introduction

This is the unified client for Notifiarr.com. The client enables content requests from Media Bot in your Discord Server and also provides reports for Plex usage and system health among many other features.

Installation

Linux

Linux repository hosting provided by packagecloud

This works on any system with apt or yum. If your system does not use APT or YUM, then download a binary from the Releases page.

On Linux, Notifiarr runs as user:group of notifiarr:notifiarr.

Install the Go Lift package repo and Notifiarr with this command:

curl -s https://golift.io/repo.sh | sudo bash -s - notifiarr

After install, edit the config and start the service:

sudo nano /etc/notifiarr/notifiarr.conf
sudo systemctl restart notifiarr

Arch Linux

This one is special; hope you know what you're doing. Build a package with makepkg using the aur source. Here: https://github.com/golift/aur

FreeBSD

  • Download a package from the Releases page.
  • Install it, edit config, start it.

Example of the above in shell form:

wget -qO- https://raw.githubusercontent.com/Notifiarr/notifiarr/main/userscripts/install.sh | sudo bash

vi /usr/local/etc/notifiarr/notifiarr.conf
service notifiarr start

On FreeBSD, Notifiarr runs as user:group of notifiarr:notifiarr.

macOS Install

Homebrew

  • Edit config file at /usr/local/etc/notifiarr/notifiarr.conf
  • Start it.
  • Like this:
brew install golift/mugs/notifiarr
vi /usr/local/etc/notifiarr/notifiarr.conf
brew services start notifiarr

macOS App

  • You can use the Apple-signed app on the Releases page.
  • When you open it for the first time it will create a config file and log file:
    • ~/.notifiarr/notifiarr.conf
    • ~/.notifiarr/notifiarr.log
  • Edit the config file and reload or restart the app.

Windows

  • Extract a .exe.zip file from the Releases page.
  • Run the notifiarr.amd64.exe binary. This starts the app in the system tray.
  • When you open it for the first time it will create a config file and log file:
    • C:\ProgramData\notifiarr\notifiarr.conf
    • <your home folder>\.notifiarr\notifiarr.log
  • Edit the new config file suit your environment then reload or restart the app.

Docker

This project builds automatically in Docker Cloud and creates ready-to-use multi-architecture images. The latest tag is always a tagged release in GitHub. The main tag corresponds to the main branch in GitHub and may be broken.

A sample docker compose file is found in Examples in this repo.

Unraid Users - You must configure a Notifiarr API Key in the Unraid Template. If you wish to use Plex then you'll also need to set the Plex Token and Plex URL in the template as well.

Docker Users - Note that Docker Environmental Variables - and thus the Unraid Template - override the Config file.

Docker Config File

  • Copy the example config file from this repo.
  • Then grab the image from docker hub and run it using an overlay for the config file.
  • You must set privileged to use smartctl (monitor_drives) and/or MegaCli (monitor_raid).
  • Map the /var/run/utmp volume if you want to count users.
  • Mount any volumes you want to report storage space for. Where does not matter, "where" is the "name".
  • You MUST set a static hostname. Each client is identified by hostname.
  • You should mount /config - notifiarr will create the config file on first run.
docker pull golift/notifiarr
docker run --hostname=$(hostname) -d \
-v /your/appdata/notifiarr/:/config \
-v /var/run/utmp:/var/run/utmp \
golift/notifiarr
docker logs <container id from docker run>

Docker Environment Variables

See below for a list of which environment variables are available. You must set --privileged when monitor drives is enabled on the website.

docker pull golift/notifiarr
docker run --hostname $(hostname) -d --privileged \
  -v /var/run/utmp:/var/run/utmp \
  -e "DN_API_KEY=abcdef-12345-bcfead-43312-bbbaaa-123" \
  -e "DN_SONARR_0_URL=http://localhost:8989" \
  -e "DN_SONARR_0_API_KEY=kjsdkasjdaksdj" \
  golift/notifiarr
docker logs <container id from docker run>

Configuration Information

WebUI

To enable the webui, add this parameter to your config file, toward the top next to quiet, and restart the client:

ui_password = "username:9CharacterPassword"

Use a password that is at least 9 characters long. Once you log into the web interface, you can change the password and it will be saved encrypted (so no one can snoop it).

You may also set ui_password to the value of "webauth" to enable proxy authentication support. You must also add your auth proxy IP or CIDR to the upstreams setting for this to work. The proxy must pass x-webauth-user: username as a header, and you will be automatically logged in.

Config Settings

  • Instead of, or in addition to a config file, you may configure a docker container with environment variables.
  • Any variable not provided takes the default.
  • Must provide an API key from notifiarr.com.
    • The Notifiarr application uses the API key for bi-directional authorization.
  • You may provide multiple sonarr, radarr or readarr instances using DN_SONARR_1_URL, DN_SONARR_2_URL, etc or by duplicating the starr block in the conf file.
Config Name Variable Name Default / Note
api_key DN_API_KEY Required / API Key from Notifiarr.com
auto_update DN_AUTO_UPDATE off / Set to daily to turn on automatic updates (windows only)
bind_addr DN_BIND_ADDR 0.0.0.0:5454 / The IP and port to listen on
quiet DN_QUIET false / Turns off output. Set a log_file if this is true
ui_password DN_UI_PASSWORD None by default. Set a username:password & change the password to encrypt it
urlbase DN_URLBASE default: / Change the web root with this setting
upstreams DN_UPSTREAMS_0 List of upstream networks that can set X-Forwarded-For
ssl_key_file DN_SSL_KEY_FILE Providing SSL files turns on the SSL listener
ssl_cert_file DN_SSL_CERT_FILE Providing SSL files turns on the SSL listener
log_file DN_LOG_FILE None by default. Optionally provide a file path to save app logs
http_log DN_HTTP_LOG None by default. Provide a file path to save HTTP request logs
log_file_mb DN_LOG_FILE_MB 100 / Max size of log files in megabytes
log_files DN_LOG_FILES 10 / Log files to keep after rotating. 0 disables rotation
file_mode DN_FILE_MODE "0600" / Unix octal filemode for new log files
timeout DN_TIMEOUT 60s / Global API Timeouts (all apps default)

All applications below (starr, downloaders, tautulli, plex) have a timeout setting. If the configuration for an application is missing the timeout, the global timeout (above) is used.

Secret Settings

Recommend not messing with these unless instructed to do so.

Config Name Variable Name Default / Note
extra_keys DN_EXTRA_KEYS_0 [] (empty list) / Add keys to allow API requests from places besides notifiarr.com
mode DN_MODE production / Change application mode: development or production
debug DN_DEBUG false / Adds payloads and other stuff to the log output; very verbose/noisy
debug_log DN_DEBUG_LOG "" / Set a file system path to write debug logs to a dedicated file
max_body DN_MAX_BODY Unlimited, 0 / Maximum debug-log body size (integer) for all debug payloads
TMPDIR %TMP% on Windows. Varies depending on system; must be writable if using Backup Corruption Check

Note: You may disable the GUI (menu item) on Windows by setting the env variable USEGUI to false.

System Snapshot

This application can take a snapshot of your system at an interval and send you a notification. Snapshot means system health like cpu, memory, disk, raid, users, etc. Other data available in the snapshot: mysql health, iotop, iostat and top data. Some of this may only be available on Linux, but other platforms have similar abilities.

If you monitor drive health you must have smartmontools (smartctl) installed. If you use smartctl on Linux, you must enable sudo. Add the sudoers entry below to /etc/sudoers and fix the path to smartctl if yours differs. If you monitor raid and use MegaCli (LSI card), add the appropriate sudoers entry for that too.

Usage of smartctl on Windows requires running this application as an administrator. Not entirely sure why, but the elevated privileges allow smartctl to gather drive data.

To monitor application disk I/O you may install iotop and add the sudoers entry for it, shown below. This feature is enabled on the website.

Snapshot Sudoers

The following sudoers entries are used by various snapshot features. Add them if you use the respective feature. You can usually just put the following content into /etc/sudoers or /etc/sudoers.d/00-notifiarr.

# Allows drive health monitoring on macOS, Linux/Docker and FreeBSD.
notifiarr ALL=(root) NOPASSWD:/usr/sbin/smartctl *

# Allows disk utilization monitoring on Linux (non-Docker).
notifiarr ALL=(root) NOPASSWD:/usr/sbin/iotop *

# Allows monitoring megaraid volumes on macOS, Linux/Docker and FreeBSD.
# Rarely needed, and you'll know if you need this.
notifiarr ALL=(root) NOPASSWD:/usr/sbin/MegaCli64 -LDInfo -Lall -aALL

These paths may not be the same on all systems. Adjust the username for macOS.

Snapshot Packages

Snapshot Configuration

There is no client configuration for snapshots (except Nvidia and MySQL, below). Snapshot configuration is found on the website.

MySQL Snapshots

You may add mysql credentials to your notifiarr configuration to snapshot mysql service health. This feature snapshots SHOW PROCESSLIST and SHOW STATUS data.

Access to a database is not required. Example Grant:

GRANT PROCESS ON *.* to 'notifiarr'@'localhost'
Config Name Variable Name Note
snapshot.mysql.name DN_SNAPSHOT_MYSQL_NAME Setting a name enables service checks of MySQL
snapshot.mysql.host DN_SNAPSHOT_MYSQL_HOST Something like: localhost:3306
snapshot.mysql.user DN_SNAPSHOT_MYSQL_USER Username in the GRANT statement
snapshot.mysql.pass DN_SNAPSHOT_MYSQL_PASS Password for the user in the GRANT statement

Nvidia Snapshots

You may report your GPU and memory Utilization for Nvidia cards. Automatic if nvidia-smi is found in PATH.

Config Name Variable Name Note
snapshot.nvidia.disabled DN_SNAPSHOT_NVIDIA_DISABLED Set to true to disable Nvidia data collection
snapshot.nvidia.smi_path DN_SNAPSHOT_NVIDIA_SMI_PATH Optional path to nvidia-smi, or nvidia-smi.exe
snapshot.nvidia.bus_ids DN_SNAPSHOT_NVIDIA_BUS_ID_0 List of Bus IDs to restrict data collection to

Lidarr

Config Name Variable Name Note
lidarr.name DN_LIDARR_0_NAME No Default. Setting a name enables service checks
lidarr.url DN_LIDARR_0_URL No Default. Something like: http://lidarr:8686
lidarr.api_key DN_LIDARR_0_API_KEY No Default. Provide URL and API key if you use Readarr
lidarr.username DN_LIDARR_0_USERNAME Provide username if using backup corruption check and auth is enabled
lidarr.password DN_LIDARR_0_PASSWORD Provide password if using backup corruption check and auth is enabled
lidarr.http_user DN_LIDARR_0_HTTP_USER Provide username if Lidarr uses basic auth (uncommon) and BCC enabled
lidarr.http_pass DN_LIDARR_0_HTTP_PASS Provide password if Lidarr uses basic auth (uncommon) and BCC enabled
  • BCC = Backup Corruption Check

Prowlarr

Config Name Variable Name Note
prowlarr.name DN_PROWLARR_0_NAME No Default. Setting a name enables service checks
prowlarr.url DN_PROWLARR_0_URL No Default. Something like: http://prowlarr:9696
prowlarr.api_key DN_PROWLARR_0_API_KEY No Default. Provide URL and API key if you use Prowlarr
prowlarr.username DN_PROWLARR_0_USERNAME Provide username if using backup corruption check and auth is enabled
prowlarr.password DN_PROWLARR_0_PASSWORD Provide password if using backup corruption check and auth is enabled
prowlarr.http_user DN_PROWLARR_0_HTTP_USER Provide username if Prowlarr uses basic auth (uncommon) and BCC enabled
prowlarr.http_pass DN_PROWLARR_0_HTTP_PASS Provide password if Prowlarr uses basic auth (uncommon) and BCC enabled

Radarr

Config Name Variable Name Note
radarr.name DN_RADARR_0_NAME No Default. Setting a name enables service checks.
radarr.url DN_RADARR_0_URL No Default. Something like: http://localhost:7878
radarr.api_key DN_RADARR_0_API_KEY No Default. Provide URL and API key if you use Radarr
radarr.username DN_RADARR_0_USERNAME Provide username if using backup corruption check and auth is enabled
radarr.password DN_RADARR_0_PASSWORD Provide password if using backup corruption check and auth is enabled
radarr.http_user DN_RADARR_0_HTTP_USER Provide username if Radarr uses basic auth (uncommon) and BCC enabled
radarr.http_pass DN_RADARR_0_HTTP_PASS Provide password if Radarr uses basic auth (uncommon) and BCC enabled

Readarr

Config Name Variable Name Note
readarr.name DN_READARR_0_NAME No Default. Setting a name enables service checks
readarr.url DN_READARR_0_URL No Default. Something like: http://localhost:8787
readarr.api_key DN_READARR_0_API_KEY No Default. Provide URL and API key if you use Readarr
readarr.username DN_READARR_0_USERNAME Provide username if using backup corruption check and auth is enabled
readarr.password DN_READARR_0_PASSWORD Provide password if using backup corruption check and auth is enabled
readarr.http_user DN_READARR_0_HTTP_USER Provide username if Readarr uses basic auth (uncommon) and BCC enabled
readarr.http_pass DN_READARR_0_HTTP_PASS Provide password if Readarr uses basic auth (uncommon) and BCC enabled

Sonarr

Config Name Variable Name Note
sonarr.name DN_SONARR_0_NAME No Default. Setting a name enables service checks
sonarr.url DN_SONARR_0_URL No Default. Something like: http://localhost:8989
sonarr.api_key DN_SONARR_0_API_KEY No Default. Provide URL and API key if you use Sonarr
sonarr.username DN_SONARR_0_USERNAME Provide username if using backup corruption check and auth is enabled
sonarr.password DN_SONARR_0_PASSWORD Provide password if using backup corruption check and auth is enabled
sonarr.http_user DN_SONARR_0_HTTP_USER Provide username if Sonarr uses basic auth (uncommon) and BCC enabled
sonarr.http_pass DN_SONARR_0_HTTP_PASS Provide password if Sonarr uses basic auth (uncommon) and BCC enabled

Downloaders

You can add supported downloaders so they show up on the dashboard integration. You may easily add service checks to these downloaders by adding a name. Any number of downloaders of any type may be configured.

All application instances also have interval and timeout inputs represented as a Go Duration. Setting interval to -1s disables service checks for that application. Setting timeout to -1s disables that instance entirely. Useful if an instacne is down temporarily. Example Go Durations: 1m, 1m30s, 3m15s, 1h5m. Valid units are s, m, and h`. Combining units is additive.

QbitTorrent

Config Name Variable Name Note
qbit.name DN_QBIT_0_NAME No Default. Setting a name enables service checks
qbit.url DN_QBIT_0_URL No Default. Something like: http://localhost:8080
qbit.user DN_QBIT_0_USER No Default. Provide URL, user and pass if you use Qbit
qbit.pass DN_QBIT_0_PASS No Default. Provide URL, user and pass if you use Qbit
qbit.http_user DN_QBIT_0_HTTP_USER Provide this username if Qbit is behind basic auth (uncommon)
qbit.http_pass DN_QBIT_0_HTTP_PASS Provide this password if Qbit is behind basic auth (uncommon)

rTorrent

Config Name Variable Name Note
rtorrent.name DN_RTORRENT_0_NAME No Default. Setting a name enables service checks
rtorrent.url DN_RTORRENT_0_URL No Default. Something like: http://localhost:5000
rtorrent.user DN_RTORRENT_0_USER No Default. Provide URL, user and pass if you use rTorrent
rtorrent.pass DN_RTORRENT_0_PASS No Default. Provide URL, user and pass if you use rTorrent

SABnzbd

Config Name Variable Name Note
sabnzbd.name DN_SABNZBD_0_NAME No Default. Setting a name enables service checks
sabnzbd.url DN_SABNZBD_0_URL No Default. Something like: http://localhost:8080/sabnzbd
sabnzbd.api_key DN_SABNZBD_0_API_KEY No Default. Provide URL and API key if you use SABnzbd

Deluge

Config Name Variable Name Note
deluge.name DN_DELUGE_0_NAME No Default. Setting a name enables service checks
deluge.url DN_DELUGE_0_URL No Default. Something like: http://localhost:8080
deluge.password DN_DELUGE_0_PASSWORD No Default. Provide URL and password key if you use Deluge
deluge.http_user DN_DELUGE_0_HTTP_USER Provide this username if Deluge is behind basic auth (uncommon)
deluge.http_pass DN_DELUGE_0_HTTP_PASS Provide this password if Deluge is behind basic auth (uncommon)

NZBGet

Config Name Variable Name Note
nzbget.name DN_NZBGET_0_NAME No Default. Setting a name enables service checks
nzbget.url DN_NZBGET_0_URL No Default. Something like: http://localhost:6789
nzbget.user DN_NZBGET_0_USER No Default. Provide URL username and password if you use NZBGet
nzbget.pass DN_NZBGET_0_PASS No Default. Provide URL username and password if you use NZBGet

Plex

This application can also send Plex sessions to Notifiarr so you can receive notifications when users interact with your server. This has three different features:

  • Notify all sessions on a longer interval (30+ minutes).
  • Notify on session nearing completion (percent complete).
  • Notify on session change (Plex Webhook) ie. pause/resume.

You must provide Plex Token for this to work. You may also need to add a webhook to Plex so it sends notices to this application.

  • In Plex Media Server, add this URL to webhooks:
    • http://localhost:5454/plex?token=plex-token-here
  • Replace localhost with the IP or host of the notifiarr application.
  • Replace plex-token-here with your plex token.
  • The Notifiarr application uses the Plex token to authorize incoming webhooks.
Config Name Variable Name Note
plex.url DN_PLEX_URL http://localhost:32400 / local URL to your plex server
plex.token DN_PLEX_TOKEN Required. Must provide Plex Token for this to work.

Tautulli

Only 1 Tautulli instance may be configured per client. Providing Tautulli allows Notifiarr to use the "Friendly Name" for your Plex users and it allows you to easily enable a service check.

Config Name Variable Name Note
tautulli.name DN_TAUTULLI_NAME No Default. Setting a name enables service checks of Tautulli
tautulli.url DN_TAUTULLI_URL No Default. Something like: http://localhost:8181
tautulli.api_key DN_TAUTULLI_API_KEY No Default. Provide URL and API key if you want name maps from Tautulli

Service Checks

The Notifiarr client can also check URLs for health. If you set names on your Starr apps they will be automatically checked and reports sent to Notifiarr. If you provide a log file for service checks, those logs will no longer write to the app log nor to console stdout.

Config Name Variable Name Note
services.log_file DN_SERVICES_LOG_FILE If a file path is provided, service check logs write there
services.interval DN_SERVICES_INTERVAL 10m, How often to send service states to Notifiarr; minimum: 5m
services.parallel DN_SERVICES_PARALLEL 1, How many services can be checked at once; 1 is plenty

You can also create ad-hoc service checks for things like Bazarr.

Config Name Variable Name Note
service.name DN_SERVICE_0_NAME Services must have a unique name
service.type DN_SERVICE_0_TYPE Type must be one of http, tcp, process, ping, icmp
service.check DN_SERVICE_0_CHECK The URL, ip, host, or host/ip:port to check
service.expect DN_SERVICE_0_EXPECT 200, For HTTP, the return code to expect
service.timeout DN_SERVICE_0_TIMEOUT 15s, How long to wait for service response
service.interval DN_SERVICE_0_INTERVAL 5m, How often to check the service

Ping and ICMP Service Checks

When type is set to ping a UDP ping check is performed, and when type is icmp an ICMP ping check is performed. With both settings, the expect parameter must be three integers separated by colons. ie. 3:2:500. This example means send 3 packets every 500 milliseconds, and expect at least 2 in return.

To enable unprivileged UDP pings on Linux you must run this command:

sudo sysctl -w net.ipv4.ping_group_range="0 2147483647"

To give the notifiarr binary access to send ICMP pings on Linux, run this command:

sudo setcap cap_net_raw=+ep /usr/bin/notifiarr

Process Service Checks

When type is set to process, the expect parameter becomes a special variable. You may set it to restart to send a notification when the process restarts. You may set it to running to alert if the process is found running (negative check). You may set it to count:min:max. ie count:1:2 means alert if process count is below 1 or above 2. You may combine these with commas. ie restart,count:1:3.

By default check is the value to find in the process list. It uses a simple string match. Unless you wrap the value in slashes, then it becomes a regex. ie. use this expect = "/^/usr/bin/smtpd$/" to match an exact string.

Run notifiarr --ps to view the process list from Notifiarr's point of view.

Reverse Proxy

You'll need to expose this application to the Internet, so Notifiarr.com can make connections to it. While you can certainly poke a hole your firewall and send the traffic directly to this app, it is recommended that you put it behind a reverse proxy. It's pretty easy.

You'll want to tune the upstreams and urlbase settings for your environment. If your reverse proxy IP is 192.168.3.45 then set upstreams = ["192.168.3.45/32"]. The urlbase can be left at /, but change it if you serve this app from a subfolder. We'll assume you want to serve the app from /notifiarr/ and it's running on 192.168.3.33 - here's a sample nginx config to do that:

location /notifiarr {
  proxy_set_header X-Forwarded-For $remote_addr;
  set $notifiarr http://192.168.3.33:5454;
  proxy_pass $notifiarr$request_uri;
}

Make sure the Nginx location path matches the urlbase Notifiarr setting. That's all there is to it.

Using an auth proxy? Be sure to set ui_password to the string "webauth". Also see the WebUI section above. The Nginx config looks more like this:

location /notifiarr/api {
  proxy_set_header X-Forwarded-For $remote_addr;
  set $notifiarr http://192.168.3.33:5454;
  proxy_pass $notifiarr$request_uri;
}

location /notifiarr {
  proxy_set_header X-Forwarded-For $remote_addr;
  proxy_set_header X-WebAuth-User $_username;
  set $notifiarr http://192.168.3.33:5454;
  proxy_pass $notifiarr$request_uri;
}

Here are two more example Nginx configs:

Troubleshooting

Log files

You can set a log file in the config. You should do that. Otherwise, find your logs here:

  • Linux: /var/log/notifiarr/app.log
  • FreeBSD: /var/log/syslog (w/ default syslog)
  • Homebrew: /usr/local/var/log/notifiarr.log or /opt/homebrew/var/log/notifiarr.log
  • macOS: ~/.notifiarr/notifiarr.log
  • Windows: <home folder>/.notifiarr/notifiarr.log

Still having problems? Let us know!

Integrations

The following fine folks are providing their services, completely free! These service integrations are used for things like storage, building, compiling, distribution and documentation support. This project succeeds because of them. Thank you!

Contributing

Join us on Discord and we can discuss.

License

MIT - Copyright (c) 2020-2024 Go Lift

notifiarr's People

Contributors

austinwbest avatar bakerboy448 avatar davidnewhall avatar renovate[bot] avatar table272 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

notifiarr's Issues

Errors on Windows 11 with 0.2.0 and 0.2.1

Not sure what happened here as I've been on Windows 11 for a couple of weeks with everything working fine. Starting yesterday, I get the following error, which is almost identical to one reported earlier in the year:

ERROR systray: systray_windows.go:932 Unable to hideMenuItem: Invalid menu handle. [error=Unable to hideMenuItem: %v error_location=github.com/getlantern/systray.hideMenuItem (systray_windows.go:932) error_text=Unable to hideMenuItem: Invalid menu handle. error_type=errors.Error]
ERROR systray: systray_windows.go:932   at github.com/getlantern/systray.hideMenuItem (systray_windows.go:932)
ERROR systray: systray_windows.go:932   at github.com/getlantern/systray.(*MenuItem).Hide (systray.go:190)
ERROR systray: systray_windows.go:932   at github.com/Notifiarr/notifiarr/pkg/client.(*Client).setupMenus (tray.go:69)
ERROR systray: systray_windows.go:932   at github.com/Notifiarr/notifiarr/pkg/client.(*Client).startTray.func1 (tray.go:36)
ERROR systray: systray_windows.go:932   at github.com/getlantern/systray.Register.func2 (systray.go:94)
ERROR systray: systray_windows.go:932   at runtime.goexit (asm_amd64.s:1581)
ERROR systray: systray_windows.go:932 Caused by: Invalid menu handle.

This comes up in a Windows Terminal window. If I close that window, the app closes. The app sits in the tray, and the menu works. It is being detected at Notifiarr.com, but functionality does not seem to be working.

Radarr list endpoint

LIST - GET api/v3/importlist

REMOVE - DELETE api/v3/importlist/3?

ADD - POST api/v3/importlist/?

{
    "enabled": true,
    "enableAuto": false,
    "shouldMonitor": false,
    "qualityProfileId": 1,
    "searchOnAdd": false,
    "minimumAvailability": "released",
    "listType": "advanced",
    "listOrder": 4,
    "name": "RadarrListImport",
    "fields": [
        {
            "name": "url",
            "value": "list-url"
        }
    ],
    "implementationName": "Custom Lists",
    "implementation": "RadarrListImport",
    "configContract": "RadarrListSettings",
    "infoLink": "https://wiki.servarr.com/radarr/supported#radarrlistimport",
    "tags": [
        6
    ],
    "rootFolderPath": "D:\\Plex\\Movies"
}

UPDATE - PUT api/v3/importlist/3?

{
    "enabled": true,
    "enableAuto": false,
    "shouldMonitor": false,
    "rootFolderPath": "D:\\Plex\\Movies",
    "qualityProfileId": 6,
    "searchOnAdd": false,
    "minimumAvailability": "released",
    "listType": "advanced",
    "listOrder": 4,
    "name": "RadarrListImport",
    "fields": [
        {
            "name": "url",
            "value": "list-url"
        }
    ],
    "implementationName": "Custom Lists",
    "implementation": "RadarrListImport",
    "configContract": "RadarrListSettings",
    "infoLink": "https://wiki.servarr.com/radarr/supported#radarrlistimport",
    "tags": [
        6
    ],
    "id": 3
}

App crashes when Plex is down.

today at 21:52:20 [INFO] 2021/07/11 21:52:20 notifiarr v0.1.11-124 Starting! [PID: 1]
today at 21:52:20 [INFO] 2021/07/11 21:52:20 ==> Using Config File: /config/notifiarr.conf
<snip>
today at 21:52:20 [ERROR] 2021/07/11 21:52:20 => Getting Plex Media Server info (check url and token): unmarshaling main page from https://plex.***.xyz: invalid character '<' looking for beginning of value
<snip>
today at 21:53:46 172.70.130.21 - - [11/Jul/2021:21:53:45 +0200] "GET /api/version HTTP/1.1" 200 - "-" "notifiarr.com" - 220ms
today at 21:53:46 [ERROR] 2021/07/11 21:53:46 http: panic serving 172.21.0.1:36966: runtime error: invalid memory address or nil pointer dereference
today at 21:53:46 goroutine 64 [running]:
today at 21:53:46 net/http.(*conn).serve.func1(0xc0001400a0)
today at 21:53:46 	/usr/local/go/src/net/http/server.go:1824 +0x153
today at 21:53:46 panic(0x8dab20, 0xc796a0)
today at 21:53:46 	/usr/local/go/src/runtime/panic.go:971 +0x499
today at 21:53:46 github.com/Notifiarr/notifiarr/pkg/client.(*Client).versionResponse(0xc000246070, 0xc00028c300, 0x60eb4c49, 0x3b075034, 0x6decc1b2042ab)
today at 21:53:46 	/notifiarr/pkg/client/handlers.go:162 +0x7c0
today at 21:53:46 github.com/Notifiarr/notifiarr/pkg/apps.(*Apps).handleAPI.func1(0xa03720, 0xc00049e000, 0xc00028c300)
today at 21:53:46 	/notifiarr/pkg/apps/apps.go:123 +0x7d8
today at 21:53:46 net/http.HandlerFunc.ServeHTTP(0xc0002b1f50, 0xa03720, 0xc00049e000, 0xc00028c300)
today at 21:53:46 	/usr/local/go/src/net/http/server.go:2069 +0x44
today at 21:53:46 github.com/Notifiarr/notifiarr/pkg/apps.(*Apps).CheckAPIKey.func1(0xa03720, 0xc00049e000, 0xc00028c300)
today at 21:53:46 	/notifiarr/pkg/apps/apps.go:142 +0xf0
today at 21:53:46 net/http.HandlerFunc.ServeHTTP(0xc00039a0e0, 0xa03720, 0xc00049e000, 0xc00028c300)
today at 21:53:46 	/usr/local/go/src/net/http/server.go:2069 +0x44
today at 21:53:46 github.com/gorilla/mux.(*Router).ServeHTTP(0xc0003b4000, 0xa03720, 0xc00049e000, 0xc00028c100)
today at 21:53:46 	/go/pkg/mod/github.com/gorilla/[email protected]/mux.go:210 +0xd3
today at 21:53:46 github.com/Notifiarr/notifiarr/pkg/client.(*Client).fixForwardedFor.func1(0xa03720, 0xc00049e000, 0xc00028c100)
today at 21:53:46 	/notifiarr/pkg/client/handlers.go:246 +0x24f
today at 21:53:46 net/http.HandlerFunc.ServeHTTP(0xc000270020, 0xa03720, 0xc00049e000, 0xc00028c100)
today at 21:53:46 	/usr/local/go/src/net/http/server.go:2069 +0x44
today at 21:53:46 github.com/lestrrat-go/apache-logformat.(*ApacheLog).Wrap.func1(0xa03e40, 0xc00009c000, 0xc00028c100)
today at 21:53:46 	/go/pkg/mod/github.com/lestrrat-go/[email protected]/logformat.go:65 +0x19f
today at 21:53:46 net/http.HandlerFunc.ServeHTTP(0xc00023e030, 0xa03e40, 0xc00009c000, 0xc00028c100)
today at 21:53:46 	/usr/local/go/src/net/http/server.go:2069 +0x44
today at 21:53:46 github.com/Notifiarr/notifiarr/pkg/client.(*Client).stripSecrets.func1(0xa03e40, 0xc00009c000, 0xc00028c100)
today at 21:53:46 	/notifiarr/pkg/client/handlers.go:231 +0x1af
today at 21:53:46 net/http.HandlerFunc.ServeHTTP(0xc00023e060, 0xa03e40, 0xc00009c000, 0xc00028c100)
today at 21:53:46 	/usr/local/go/src/net/http/server.go:2069 +0x44
today at 21:53:46 net/http.serverHandler.ServeHTTP(0xc000168000, 0xa03e40, 0xc00009c000, 0xc00028c100)
today at 21:53:46 	/usr/local/go/src/net/http/server.go:2887 +0xa3
today at 21:53:46 net/http.(*conn).serve(0xc0001400a0, 0xa04c20, 0xc00049a000)
today at 21:53:46 	/usr/local/go/src/net/http/server.go:1952 +0x8cd
today at 21:53:46 created by net/http.(*Server).Serve
today at 21:53:46 	/usr/local/go/src/net/http/server.go:3013 +0x39b
today at 21:53:46 172.70.130.21 - - [11/Jul/2021:21:53:46 +0200] "GET /502.html HTTP/1.1" 404 85 "-" "notifiarr.com" - 0ms

https://0bin.net/paste/281D3ONb#l6CpyfFmBUEg2YjX-XB9RjY71FhoTErXuxKbmAPjwu0

Manually triggered endpoints

Since many things are on timers, it creates an issue trying to troubleshoot. The sync endpoint is available to be triggered via api & we discussed having all the right click menu options available via endpoint triggers.

This is the request to put it in :)

rtorrent-flood

I would like to se a intergration of rtorrent-flood, somelike qbittorent, added to the dashboard :-)

Add sonarr endpoint

need to expose /api/v3/episode and /api/v3/episode/monitor for sonarr.

GET -> /api/v3/episode?seriesId=<series-id> will return all episodes for a given series
PUT -> /api/v3/episode/monitor with a JSON payload {episodeIds: [<int-list>], monitored: <true|false>} to update the monitor status for a list of episode ids

Auto updater

Windows: Automatic, solved: #52
Docker: Exists Already
Synology: Make install script crontab-capable: #59
Linux: packagecloud.io for apt and yum repos. Solved: #54

Add queue support to client

So to track/notify stalled imports, lets add this.

Monitor the queue every 5 mins, if an item has been finished for more than 10 minutes we need to post that to the site. I'll make an endpoint to accept it

Endpoint: /api/v1/user/client
Method: POST
Payload: {type: 'queue', app: 'radarr', download_id: '....', title: '....', release: '....', finished: '....', message: '....'}

An example, adjust as needed as nothing is in place on my end other than checking the type

windows throwing errors with debug off

ERROR systray: systray_windows.go:932   at github.com/getlantern/systray.hideMenuItem (systray_windows.go:932)
ERROR systray: systray_windows.go:932   at github.com/getlantern/systray.(*MenuItem).Hide (systray.go:190)
ERROR systray: systray_windows.go:932   at github.com/Notifiarr/notifiarr/pkg/client.(*Client).makeMoreChannels (tray.go:128)
ERROR systray: systray_windows.go:932   at github.com/Notifiarr/notifiarr/pkg/client.(*Client).readyTray (tray.go:49)
ERROR systray: systray_windows.go:932   at github.com/getlantern/systray.Register.func2 (systray.go:94)
ERROR systray: systray_windows.go:932   at runtime.goexit (asm_amd64.s:1371)
ERROR systray: systray_windows.go:932 Caused by: Invalid menu handle.

If debug is set to true then the error goes away.

[INFO] 2021/07/06 14:02:34 notifiarr v0.1.11-124 Starting! [PID: 7772]

Few more endpoints

Radarr
/qualityprofile - GET and returns a JSON payload
/qualityprofile - POST creates a new one with provided JSON payload
/qualityprofile/[id:0-9] - PUT updates an existing with provided JSON payload

Sonarr
/releaseprofile - GET and returns a JSON payload
/releaseprofile - POST creates a new one with provided JSON payload
/releaseprofile/[id:0-9] - PUT updates an existing with provided JSON payload

Crash before startup payload

App currently sends a payload to the website before all startup checks are done. This can cause a lot of payloads to the server from a misconfigured client.

Notifiarr Arch Linux Package

Archlinux has both Official Repositories and Arch User Repositories (AUR). Currently Notifiarr is in neither.

For a Noob, the convertion process is complicated with the potential to brick one's system.

This is a humble request for the Developer to consider availing an Archlinux Package so that we can also access Notifiarr. Thanks in advance.

Add timer for state of affairs

Create a timer (configurable maybe) that collects library and downloader data, sends it to notifiarr.com.

Example:

Radarr: /api/v3/movie (count data, can get monitored/missing from this)
Movies: 123 
Missing: 123
Upcoming: 123 (total?)
Size: 123TB

Sonarr:
Shows: 123
Episodes: 123
Missing: 123
Airing this week: 123 (next 7 days?)
Size: 123TB

Lidarr:
Artists: 123
Albums: 123
? Missing: 123 /api/var/wanted/missing
Tracks: 123 
Size: 123TB

Readarr: 
Authors: 123
Books: 123
Size: 123

Downloader:
Seeding: 123
Active: 123
Uploading: 123
Downloading: 123
Errors: 123

Add adduser to Synology script

info: https://community.synology.com/enu/forum/17/post/110411

# synouser --help
Copyright (c) 2003-2020 Synology Inc. All rights reserved.

Usage: synouser (Version 25426)
        --help
        --rebuild {all|(domain Force{0|1})|(ldap Force{0|1})}
        --enum {local|domain|ldap|all|domain_used}
        --enumpre {local|domain|all|domain_used} prefix Caseless{0|1}
        --enumsub {local|domain|all|domain_used} substr Caseless{0|1}
        --get username
        --getuid UID
        --add [username pwd "full name" expired{0|1} mail privilege]
        --modify username "full name" expired{0|1} mail
        --rename old_username new_username
        --setpw username newpasswd
        --del username1 username2 ...
        --login username pwd
        --dbopen2 username
        --filesetpw filename
        --create_homes {domain|ldap}

Client will not start if it cannot connect to Qbit or Deluge

client fails to start if it cannot connect to qbit; we should skip and not choke on failing due to an app or service being down

Nov 14 18:17:25 hetz-baker-2004 notifiarr[1443006]: [ERROR] 2021/11/14 18:17:25 Using Config File: /etc/notifiarr/notifiarr.conf: getting config: setting up app: qbit setup failed: login f>
Nov 14 18:17:25 hetz-baker-2004 systemd[1]: notifiarr.service: Main process exited, code=exited, status=1/FAILURE

Linux Package Error: discordnotifier-client.postinst: 10: [: Linux: unexpected operator

Logs:
Jan 27 16:48:53 hetz-baker-2004 systemd[1]: Started discordnotifier-client - Unified Client for DiscordNotifier.com.
Jan 27 16:48:53 hetz-baker-2004 systemd[1794889]: discordnotifier-client.service: Failed to determine user credentials: No such process
Jan 27 16:48:53 hetz-baker-2004 systemd[1794889]: discordnotifier-client.service: Failed at step USER spawning /usr/bin/discordnotifier-client: No such process
Jan 27 16:48:53 hetz-baker-2004 systemd[1]: discordnotifier-client.service: Main process exited, code=exited, status=217/USER
Jan 27 16:48:53 hetz-baker-2004 systemd[1]: discordnotifier-client.service: Failed with result 'exit-code'.

bakerboy448@hetz-baker-2004:/opt$ sudo wget -qO- https://raw.githubusercontent.com/Go-Lift-TV/discordnotifier-client/main/scripts/install.sh | sudo bash
<-------------------------------------------------->
==> Downloading: https://github.com/Go-Lift-TV/discordnotifier-client/releases/download/v0.0.5/discordnotifier-client_0.0.5-24_amd64.deb
==> To Location: /tmp/discordnotifier-client_0.0.5-24_amd64.deb
==> Downloaded. Installing the package!
==> Executing: dpkg --force-confdef --force-confold --install /tmp/discordnotifier-client_0.0.5-24_amd64.deb
(Reading database ... 164641 files and directories currently installed.)
Preparing to unpack .../discordnotifier-client_0.0.5-24_amd64.deb ...
Unpacking discordnotifier-client (0.0.5-24) over (0.0.5-24) ...
Setting up discordnotifier-client (0.0.5-24) ...
/var/lib/dpkg/info/discordnotifier-client.postinst: 10: [: Linux: unexpected operator
/var/lib/dpkg/info/discordnotifier-client.postinst: 14: [: Linux: unexpected operator
/var/lib/dpkg/info/discordnotifier-client.postinst: 17: [: Linux: unexpected operator
Unknown OS: Linux, this app may not work.

Yet
bakerboy448@hetz-baker-2004:/opt$ sudo uname -s
Linux

Current Work Around:
Run this after install as the postinst fails
sudo useradd --system --user-group --no-create-home --home-dir /tmp --shell /bin/false discordnotifier-client

Somehow this is not true
https://github.com/Go-Lift-TV/discordnotifier-client/blob/main/scripts/after-install.sh#L10

Add request to client for trash sync

Instead of me running it on a cron, lets switch it to a GET request from the client every 10 mins

https://notifiarr.com/api/v1/user/trash/key-here

Network sending empty payloads

If there are no services being monitored, it is now sending empty payloads. You confirmed it is an issue but adding it here for memory sake

New endpoints needed

3 for custom formats in radarr (get, add, edit) and 3 for release profiles in sonarr

GET api/v3/customformat

{
  "id": 1,
  "name": "Dolby TrueHD/ATMOS",
  "includeCustomFormatWhenRenaming": false,
  "specifications": [
    {
      "name": "truehd|atmos",
      "implementation": "ReleaseTitleSpecification",
      "implementationName": "Release Title",
      "infoLink": "https://wiki.servarr.com/Radarr_Settings#Custom_Formats_2",
      "negate": false,
      "required": false,
      "fields": [
        {
          "order": 0,
          "name": "value",
          "label": "Regular Expression",
          "value": "truehd|atmos",
          "type": "textbox",
          "advanced": false
        }
      ]
    }
  ]
}

and POST api/v3/customformat to add is the same payload

{
    "name": "Dolby TrueHD/ATMOS",
    "includeCustomFormatWhenRenaming": false,
    "specifications": [{
        "name": "truehd|atmos",
        "implementation": "ReleaseTitleSpecification",
        "negate": false,
        "required": false,
        "fields": {
            "value": "truehd|atmos"
        }
    }]
}

and PUT /api/v3/customformat/{id:0-9}? with the same payload as POST

Jellyfin - Not receiving "Item Added" notifications.

Hello -- I love Notifiarr; it works wonderfully. However, I have noticed that on Jellyfin I don't seem to ever receive "Item Added" notifications, even though I see on Jellyfin that several episodes of a TV show have been added, or a movie, etc. Via the Jellyfin Webhook plugin I've tried both a "Discord" destination as well as a "Generic" destination but no luck. Choosing "Generic" destination doesn't work at all, actually. Might I be doing something wrong / Has anyone pointed this out before? Thanks!

Adjust the conf or the code for bind address

## This will be used in Plex for example to send webhooks, Example: http://localhost:5454
## This will be used in Media Requests for example to send payloads, Example: http://your-domain.com:5454

If a user actually puts http:// in the bind address such as the example, it throws...

[ERROR] 2021/07/06 14:02:34 Web Server Failed: listen tcp: address http://192.168.1.21:5454: too many colons in address (shutting down)

Because that translates to

[INFO] 2021/07/06 14:02:34  => Web HTTP Listen: http://http://192.168.1.21:5454/

[Feature Request] Ombi Integration

Any plans for Ombi support?

Many can't use Overseerr since no JellyFin support. Ombi also has a bigger user base plus more features such as music.

Thanks for this project.

Add internal poll for services

Do an internal poll (default every 2 mins with a hidden config) to check the up status of all services and hold them until the notify timer is met. This will allow for a more accurate accounting of downtime when the notification timer is higher

Update initial patron check

Currently the client checks if the users is a subscriber before allowing the sync to work. This isn't right, it should be checking if they are a patron so i have added both to the initial response. subscriber and patron both of which are a bool

Update the checks to look at the patron t/f instead of subscriber

Error after moving all services to unRaid.

They were all working when they were stand alone dockers on a ubuntu box. I moved them all unRaid yesterday and noticed this error. If I comment out Radarr from the config. Only the top error goes away. Note - Notifiarr is in a docker on the ubuntu box.

[ERROR] 2021/11/16 18:14:15 Radarr URL fixed: http://192.168.1.241:7878/ -> http://192.168.1.241:7878 (continuing)
[ERROR] 2021/11/16 18:12:40 Go Panic! This is a bug please report it on github: https://github.com/Notifiarr/notifiarr/issues/new

runtime error: invalid memory address or nil pointer dereference

goroutine 1 [running]:
runtime/debug.Stack()
	/usr/local/go/src/runtime/debug/stack.go:24 +0x65
main.main.func1()
	/notifiarr/main.go:21 +0x3d
panic({0x87eda0, 0xc9d800})
	/usr/local/go/src/runtime/panic.go:1038 +0x215
github.com/Notifiarr/notifiarr/pkg/apps.(*Apps).Setup(0xc000240000, 0x8cd460)
	/notifiarr/pkg/apps/apps.go:177 +0x374
github.com/Notifiarr/notifiarr/pkg/configfile.(*Config).Get(0xc0002304e0, {0x90c498, 0x16}, {0x9030c7, 0x2})
	/notifiarr/pkg/configfile/config.go:95 +0x1bb
github.com/Notifiarr/notifiarr/pkg/client.(*Client).loadConfiguration(0xc000214980)
	/notifiarr/pkg/client/start.go:137 +0x1dd
github.com/Notifiarr/notifiarr/pkg/client.(*Client).start(0xc000214980)
	/notifiarr/pkg/client/start.go:81 +0x36
github.com/Notifiarr/notifiarr/pkg/client.Start()
	/notifiarr/pkg/client/start.go:76 +0xae
main.main()

/bin/sh: useradd: not found - FreeBSD 12

Hello

So after messing around with discord-notifier stuff, i ve tried to install the client on a FreeBSD 12 amd64 jail running for days radarr/sonarr/jackett and the installation fails with this error :

root@indexers:~ # sudo pkg install /tmp/discordnotifier-client-0.0.3_24.amd64.txz
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Checking integrity... done (0 conflicting)
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        discordnotifier-client: 0.0.3-24

Number of packages to be installed: 1

Proceed with this action? [y/N]: y
[indexers] [1/1] Installing discordnotifier-client-0.0.3-24...
[indexers] Extracting discordnotifier-client-0.0.3-24: 100%
/bin/sh: useradd: not found
root@indexers:~ # 

bash + sudo is installed obvisouly.
logs don't in /var/log aren't helping either

Allow Import of Existing Friendly Name to Email Mapping from Tautulli

Use Case: User already has friendly name to Plex user email mapping assigned in Tautulli

Current State: User manually re-enters mapping in site

Proposal: Provide a method for a user to supply Tautulli instance URL and API key to the client, call the API's get_users endpoint to retrieve the Tautulli user list, deliver the necessary payload to the site, and populate the email to friendly name mapping.

Benefits

  • Simplifies onboarding
  • Encourages users to mask email addresses
  • Lowers barrier of entry for users with larger user rolls

Resources

get_users endpoint
http(s)://{{instance_ip}}/{{http_root}}/api/v2?apikey={{api_key}}&cmd=get_users

Example Response

    "response": {
        "result": "success",
        "message": null,
        "data": [
            {
                "row_id": 1,
                "user_id": 31010000,
                "username": "[email protected]",
                "friendly_name": "Sally",
                "thumb": "https://plex.tv/users/643aaa0000aaa0a0/avatar?c=158000000",
                "email": "[email protected]",
                "is_active": 1,
                "is_admin": 0,
                "is_home_user": 0,
                "is_allow_sync": 1,
                "is_restricted": 0,
                "do_notify": 0,
                "keep_history": 1,
                "allow_guest": 0,
                "server_token": "uCaNh4sMyT0k3n",
                "shared_libraries": "4;1;3;2",
                "filter_all": "",
                "filter_movies": "",
                "filter_tv": "",
                "filter_music": "",
                "filter_photos": ""
            },
            {
                "row_id": 2,
                "user_id": 36850000,
                "username": "[email protected]",
                "friendly_name": "Robb",
                "thumb": "https://plex.tv/users/643aaa0000aaa0a1/avatar?c=1258000001",
                "email": "[email protected]",
                "is_active": 1,
                "is_admin": 0,
                "is_home_user": 0,
                "is_allow_sync": 1,
                "is_restricted": 0,
                "do_notify": 0,
                "keep_history": 1,
                "allow_guest": 0,
                "server_token": "uCaNh4sMyT0k3n",
                "shared_libraries": "1;2",
                "filter_all": "",
                "filter_movies": "",
                "filter_tv": "",
                "filter_music": "",
                "filter_photos": ""
            },
            {
                "row_id": 3,
                "user_id": 17000,
                "username": "amnesia",
                "friendly_name": "phutur1st",
                "thumb": "https://plex.tv/users/643aaa0000bfa0a1/avatar?c=1358000001",
                "email": "[email protected]",
                "is_active": 1,
                "is_admin": 1,
                "is_home_user": 1,
                "is_allow_sync": 1,
                "is_restricted": 0,
                "do_notify": 0,
                "keep_history": 1,
                "allow_guest": 0,
                "server_token": "AbRaCaDabRa",
                "shared_libraries": "1;4;2;3;5;999999;6",
                "filter_all": "",
                "filter_movies": "",
                "filter_tv": "",
                "filter_music": "",
                "filter_photos": ""
            },
            {
                "row_id": 4,
                "user_id": 12180001,
                "username": "Ash",
                "friendly_name": "Ash",
                "thumb": "https://plex.tv/users/cd24560a0a0a0a0a/avatar?c=130000000",
                "email": "",
                "is_active": 1,
                "is_admin": 0,
                "is_home_user": 1,
                "is_allow_sync": 1,
                "is_restricted": 1,
                "do_notify": 1,
                "keep_history": 1,
                "allow_guest": 0,
                "server_token": "aBraCaDabRa",
                "shared_libraries": "6;4;1;3;5;2",
                "filter_all": "",
                "filter_movies": "",
                "filter_tv": "",
                "filter_music": "",
                "filter_photos": ""
            }
        ]
    }
}

Plex trigger for finished notifications

Add config values to the plex section

seriesPercentComplete = 90
moviePercentComplete = 95

Monitor plex api every minute for what is actively being watched and when the watched time / runtime >= the complete setting for the given type, send me a payload

crash

[ERROR] 2021/03/28 12:48:16 Sending service check update to Notifiarr: making http request: Post "https://notifiarr.com": dial tcp: lookup notifiarr.com on 127.0.0.11:53: server misbehaving

panic: send on closed channel

goroutine 10323 [running]:
github.com/Go-Lift-TV/notifiarr/pkg/notifiarr.(*Config).SendMeta.func2(0xc00028c060, 0xc0000a8fc0, 0x9b4fe8, 0xc00069ee40, 0xc0002e8080)
/notifiarr/pkg/notifiarr/notifiarr.go:115 +0x78
created by github.com/Go-Lift-TV/notifiarr/pkg/notifiarr.(*Config).SendMeta
/notifiarr/pkg/notifiarr/notifiarr.go:114 +0x23f

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.