Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Support] Unraid simple monitoring API

Featured Replies

2 hours ago, The_Holocron said:

Okay, I'm clearly being dense today.

I keep getting this error:
 

text  error  warn  system  array  login  

2024/04/08 21:59:59 ERROR Cannot read conf.yml error="read /app/conf.yml: is a directory"

** Press ANY KEY to close this window ** 

 

I have a text file named "conf.yml" inside the folder "/mnt/user/appdata/unraid-simple-monitoring-api/conf.yml" and I get the error above. 

I tried to move it to "/mnt/user/appdata/unraid-simple-monitoring-api/" but same.

I am also having this issue. the instructions are not very clear. Have done both config.yml inside the config.yml folder as well as the main app/unraid-simple-monitoring-api/ folder

21 minutes ago, Schwaby412 said:

I am also having this issue. the instructions are not very clear. Have done both config.yml inside the config.yml folder as well as the main app/unraid-simple-monitoring-api/ folder

I think there is an error in the container image and it's getting confused looking in a folder named "conf.yml".

1 hour ago, The_Holocron said:

I think there is an error in the container image and it's getting confused looking in a folder named "conf.yml".

Go it running image.thumb.png.2771c43185b4eac4001a9ed71df8d910.png

remove the /config.yml at the end. 

  • Author
5 hours ago, Schwaby412 said:

Go it running image.thumb.png.2771c43185b4eac4001a9ed71df8d910.png

remove the /config.yml at the end. 

While this works, it should not be necessary, you can mount files directly in Docker, which is what the default configuration does.

 

My configuration, which is the default, has:
- container path: /app/conf.yml
- host path: /mnt/user/appdata/unraid-simple-monitoring-api/conf.yml

 

Just make sure you restart the app once you have made sure that the file you specify in the mount binding exists.

 

The error "read /app/conf.yml: is a directory" is due to how Docker handles misconfigured mount points, if the host file/directory specified to be mounted at "/app/conf.yml" does not exist, Docker will create an empty directory in its place, and you will get this error, which I admit is not very helpful.

1 hour ago, NebN said:

While this works, it should not be necessary, you can mount files directly in Docker, which is what the default configuration does.

 

My configuration, which is the default, has:
- container path: /app/conf.yml
- host path: /mnt/user/appdata/unraid-simple-monitoring-api/conf.yml

 

Just make sure you restart the app once you have made sure that the file you specify in the mount binding exists.

 

The error "read /app/conf.yml: is a directory" is due to how Docker handles misconfigured mount points, if the host file/directory specified to be mounted at "/app/conf.yml" does not exist, Docker will create an empty directory in its place, and you will get this error, which I admit is not very helpful.

I think the issue is that when the template runs with the default settings, it is creating a folder named "conf.yml" at /mnt/user/appdata/unraid-simple-monitoring-api/ because the "conf.yml" file doesn't exist.

In my opinion, it would be better to just point to the folder, rather than the file directly. I would change it to:
- container path: /app
- host path: /mnt/user/appdata/unraid-simple-monitoring-api

or

- container path: /app/config
- host path: /mnt/user/appdata/unraid-simple-monitoring-api/config

But. I will try the notes above and let you know if it works.

 

UPDATE: The default settings work on restart, but you have to delete the erroneous "conf.yml" folder that the template automatically creates.

Edited by The_Holocron
update

  • Author
1 hour ago, The_Holocron said:

UPDATE: The default settings work on restart, but you have to delete the erroneous "conf.yml" folder that the template automatically creates.

Copying my response from GitHub so it's visible to anyone else who might encounter this problem:

 

This is very interesting, I just completely uninstalled and reinstalled the app, while also removing the conf folder, and it does in fact create a folder named conf.yml upon first starting the app, which is certainly confusing. This is not something I had noticed in my testing so far.

I'll see what I can do to avoid this in future installations. Thanks for bringing this to my attention!

Cool. If you need to test something, let me know. Happy to help.

Works great otherwise. Any possibility of adding temperature attributes?

  • Author
38 minutes ago, The_Holocron said:

Cool. If you need to test something, let me know. Happy to help.

Works great otherwise. Any possibility of adding temperature attributes?

Temperature is tricky, but I'll see what's possible without having any software dependencies. 

  • 2 months later...
  • Author
On 4/9/2024 at 7:04 PM, The_Holocron said:

Cool. If you need to test something, let me know. Happy to help.

Works great otherwise. Any possibility of adding temperature attributes?

Temperature is now available. Disks and CPU. CPU temperature file might have to be specified in the configuration, you can read more about it on the readme.

Edited by NebN

  • 4 weeks later...
On 4/1/2024 at 6:05 PM, IggyWhite said:

For me, almost everything works fine. Problem is, here and there, seemingly at random, there is a parsing error:

 

...
[2024-04-01T20:49:31.797Z] warn: Invalid data for widget 'customapi' endpoint 'null':
Expected:undefined
Parse error: SyntaxError: Unexpected token j in JSON at position 0
Data: {"type":"Buffer","data":[106,115,111,110,58,32,117,110,115,117,112,112,111,114,116,101,100,32,118,97,108,117,101,58,32,78,97,78]}
[2024-04-01T20:49:51.909Z] warn: Invalid data for widget 'customapi' endpoint 'null':
Expected:undefined
Parse error: SyntaxError: Unexpected token j in JSON at position 0
Data: {"type":"Buffer","data":[106,115,111,110,58,32,117,110,115,117,112,112,111,114,116,101,100,32,118,97,108,117,101,58,32,78,97,78]}
[2024-04-01T20:50:01.985Z] warn: Invalid data for widget 'customapi' endpoint 'null':
Expected:undefined
Parse error: SyntaxError: Unexpected token j in JSON at position 0
Data: {"type":"Buffer","data":[106,115,111,110,58,32,117,110,115,117,112,112,111,114,116,101,100,32,118,97,108,117,101,58,32,78,97,78]}
...

 

and a random disk widget reports an error:

 

hpi1.thumb.png.4d7cf04d32878ed725c9c26002fec118.png

 

On the next refresh, the error goes away completely for a while, or appears for some other disk.

 

For the life of me, I can't find the reason.

 

p.s.

First seven widgets use Glances service. And I've never had this kind of problem with it.

 

Great job, that was impressive! Would you mind to share your code? I'd love to try something similar!

  • 4 weeks later...

Sure, here it is. It's nothing fancy or smart, but if it can help you, I'm glad.

Of course, your IP addresses/ports and/or usernames/passwords may vary.

 

bookmarks.yaml:

- Server management:
    - Server1 (OMV):
        - abbr: AN
          href: http://192.168.1.26:800
    - Server2 (OMV):
        - abbr: AU
          href: http://192.168.1.29
    - Server3 (UNRAID):
        - abbr: HY
          href: http://192.168.1.27
    - Server4 (ESXi):
        - abbr: OR
          href: http://192.168.1.23
    - Server5 (UNRAID):
        - abbr: CY
          href: http://192.168.1.30
    - Server1 (CasaOS):
        - abbr: ANC
          href: http://192.168.1.26:81
    - Server2 (CasaOS):
        - abbr: AUC
          href: http://192.168.1.29:81

- Remote access controllers:
    - Server1:
        - abbr: AN
          href: http://192.168.1.17
    - Server2:
        - abbr: AU
          href: http://192.168.1.18
    - Server3:
        - abbr: HY
          href: http://192.168.1.13
    - Server4:
        - abbr: OR
          href: http://192.168.1.14
    - Server5:
        - abbr: CY
          href: http://192.168.1.19
    - Chassis1:
        - abbr: FX
          href: http://192.168.1.10
    - Server6:
        - abbr: ER
          href: http://192.168.1.11
    - Server7:
        - abbr: FO
          href: http://192.168.1.12
    - LANSwitch1:
        - abbr: UM
          href: http://192.168.1.5

 

settings.yaml

title: Homepage Home
headerStyle: boxedWidgets
color: slate

providers:
  openweathermap: openweathermapapikey
  weatherapi: weatherapiapikey

layout:
  Server1:
    useEqualHeights: true
    style: row
    columns: 5
    disableCollape: true
    
  Server2:
    useEqualHeights: true
    style: row
    columns: 5
    disableCollapse: true
    
  Server3:
    useEqualHeights: true
    style: row
    columns: 4
    disableCollapse: true
    
  Server4:
    style: row
    columns: 5
    disableCollapse: true
    
  Server5:
    style: row
    columns: 5
    disableCollapse: true
    
  Server management:
    useEqualHeights: true
    style: row
    columns: 5
    
  Remote access controllers:
    useEqualHeights: true
    style: row
    columns: 5

 

widgets.yaml

- resources:
    label: System
    expanded: true
    cpu: true
    memory: true
    cputemp: true
    uptime: true
    
- resources:
    label: Storage
    expanded: true
    disk:
      - /
#      - /disk1
#      - /mnt/disk2
#      - /mnt/disk3
#      - /mnt/mcache
#      - /mnt/vcache

- search:
    provider: duckduckgo
    target: _blank

 

services.yaml

- Server3:
    - Dell R730xd:
        icon: unraid
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: info
    - CPU:
        icon: thunderhub-light
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: cpu
    - Memory:
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: memory
    - Network:
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: network:eth0
    - Processes:
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: process
    - CPU 1 temperature:
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: sensor:Package id 0
    - CPU 2 temperature:
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: sensor:Package id 1
    - Disk 1:
        widget:
          display: list
          type: customapi
          url: http://192.168.1.27:24940
          method: GET
          mappings:
            - field:
                array:
                  0: total
              label: total
              format: number
              suffix: "GB"
            - field: 
                array:
                  0: used
              label: used
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    0: used_percent
                format: percent
                prefix: "("
                suffix: ")"
            - field: 
                array:
                  0: free
              label: free
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    0: free_percent
                format: percent
                prefix: "("
                suffix: ")"
    - Disk 2:
        widget:
          display: list
          type: customapi
          url: http://192.168.1.27:24940
          method: GET
          mappings:
            - field:
                array:
                  1: total
              label: total
              format: number
              suffix: "GB"
            - field: 
                array:
                  1: used
              label: used
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    1: used_percent
                format: percent
                prefix: "("
                suffix: ")"
            - field: 
                array:
                  1: free
              label: free
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    1: free_percent
                format: percent
                prefix: "("
                suffix: ")"
    - Disk 3:
        widget:
          display: list
          type: customapi
          url: http://192.168.1.27:24940
          method: GET
          mappings:
            - field:
                array:
                  2: total
              label: total
              format: number
              suffix: "GB"
            - field: 
                array:
                  2: used
              label: used
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    2: used_percent
                format: percent
                prefix: "("
                suffix: ")"
            - field: 
                array:
                  2: free
              label: free
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    2: free_percent
                format: percent
                prefix: "("
                suffix: ")"
    - MCache:
        widget:
          display: list
          type: customapi
          url: http://192.168.1.27:24940
          method: GET
          mappings:
            - field:
                cache:
                  0: total
              label: total
              format: number
              suffix: "GB"
            - field: 
                cache:
                  0: used
              label: used
              format: number
              suffix: "GB"
              additionalField:
                field:
                  cache:
                    0: used_percent
                format: percent
                prefix: "("
                suffix: ")"
            - field: 
                cache:
                  0: free
              label: free
              format: number
              suffix: "GB"
              additionalField:
                field:
                  cache:
                    0: free_percent
                format: percent
                prefix: "("
                suffix: ")"
    - VCache:
        widget:
          display: list
          type: customapi
          url: http://192.168.1.27:24940
          method: GET
          mappings:
            - field:
                cache:
                  1: total
              label: total
              format: number
              suffix: "GB"
            - field: 
                cache:
                  1: used
              label: used
              format: number
              suffix: "GB"
              additionalField:
                field:
                  cache:
                    1: used_percent
                format: percent
                prefix: "("
                suffix: ")"
            - field: 
                cache:
                  1: free
              label: free
              format: number
              suffix: "GB"
              additionalField:
                field:
                  cache:
                    1: free_percent
                format: percent
                prefix: "("
                suffix: ")"

#- Server1:
#    - Dell R630:
#        icon: openmediavault
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: info
#    - CPU:
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: cpu
#    - Memory:
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: memory
#    - Network:
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: network:eth0
#    - Processes:
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: process
#    - CPU temperature:
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: sensor:Package id 0
#    - S.M.A.R.T.:
#        widget: 
#          type: openmediavault
#          url: http://192.168.1.26:800
#          username: xxxxxx
#          password: xxxxxx
#          method: smart.getListBg
          
- Server2:
    - Dell R630:
        icon: openmediavault
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: info
    - CPU:
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: cpu
    - Memory:
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: memory
    - Network:
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: network:eth0
    - Processes:
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: process
    - CPU temperature:
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: sensor:Package id 0
    - S.M.A.R.T.:
        widget:
          type: openmediavault
          url: http://192.168.1.29
          username: xxxxxx
          password: xxxxxx
          method: smart.getListBg

 

  • 5 months later...
On 8/9/2024 at 4:56 AM, IggyWhite said:

Sure, here it is. It's nothing fancy or smart, but if it can help you, I'm glad.

Of course, your IP addresses/ports and/or usernames/passwords may vary.

 

bookmarks.yaml:

- Server management:
    - Server1 (OMV):
        - abbr: AN
          href: http://192.168.1.26:800
    - Server2 (OMV):
        - abbr: AU
          href: http://192.168.1.29
    - Server3 (UNRAID):
        - abbr: HY
          href: http://192.168.1.27
    - Server4 (ESXi):
        - abbr: OR
          href: http://192.168.1.23
    - Server5 (UNRAID):
        - abbr: CY
          href: http://192.168.1.30
    - Server1 (CasaOS):
        - abbr: ANC
          href: http://192.168.1.26:81
    - Server2 (CasaOS):
        - abbr: AUC
          href: http://192.168.1.29:81

- Remote access controllers:
    - Server1:
        - abbr: AN
          href: http://192.168.1.17
    - Server2:
        - abbr: AU
          href: http://192.168.1.18
    - Server3:
        - abbr: HY
          href: http://192.168.1.13
    - Server4:
        - abbr: OR
          href: http://192.168.1.14
    - Server5:
        - abbr: CY
          href: http://192.168.1.19
    - Chassis1:
        - abbr: FX
          href: http://192.168.1.10
    - Server6:
        - abbr: ER
          href: http://192.168.1.11
    - Server7:
        - abbr: FO
          href: http://192.168.1.12
    - LANSwitch1:
        - abbr: UM
          href: http://192.168.1.5

 

settings.yaml

title: Homepage Home
headerStyle: boxedWidgets
color: slate

providers:
  openweathermap: openweathermapapikey
  weatherapi: weatherapiapikey

layout:
  Server1:
    useEqualHeights: true
    style: row
    columns: 5
    disableCollape: true
    
  Server2:
    useEqualHeights: true
    style: row
    columns: 5
    disableCollapse: true
    
  Server3:
    useEqualHeights: true
    style: row
    columns: 4
    disableCollapse: true
    
  Server4:
    style: row
    columns: 5
    disableCollapse: true
    
  Server5:
    style: row
    columns: 5
    disableCollapse: true
    
  Server management:
    useEqualHeights: true
    style: row
    columns: 5
    
  Remote access controllers:
    useEqualHeights: true
    style: row
    columns: 5

 

widgets.yaml

- resources:
    label: System
    expanded: true
    cpu: true
    memory: true
    cputemp: true
    uptime: true
    
- resources:
    label: Storage
    expanded: true
    disk:
      - /
#      - /disk1
#      - /mnt/disk2
#      - /mnt/disk3
#      - /mnt/mcache
#      - /mnt/vcache

- search:
    provider: duckduckgo
    target: _blank

 

services.yaml

- Server3:
    - Dell R730xd:
        icon: unraid
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: info
    - CPU:
        icon: thunderhub-light
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: cpu
    - Memory:
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: memory
    - Network:
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: network:eth0
    - Processes:
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: process
    - CPU 1 temperature:
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: sensor:Package id 0
    - CPU 2 temperature:
        widget:
          type: glances
          url: http://192.168.1.27:61208
          metric: sensor:Package id 1
    - Disk 1:
        widget:
          display: list
          type: customapi
          url: http://192.168.1.27:24940
          method: GET
          mappings:
            - field:
                array:
                  0: total
              label: total
              format: number
              suffix: "GB"
            - field: 
                array:
                  0: used
              label: used
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    0: used_percent
                format: percent
                prefix: "("
                suffix: ")"
            - field: 
                array:
                  0: free
              label: free
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    0: free_percent
                format: percent
                prefix: "("
                suffix: ")"
    - Disk 2:
        widget:
          display: list
          type: customapi
          url: http://192.168.1.27:24940
          method: GET
          mappings:
            - field:
                array:
                  1: total
              label: total
              format: number
              suffix: "GB"
            - field: 
                array:
                  1: used
              label: used
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    1: used_percent
                format: percent
                prefix: "("
                suffix: ")"
            - field: 
                array:
                  1: free
              label: free
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    1: free_percent
                format: percent
                prefix: "("
                suffix: ")"
    - Disk 3:
        widget:
          display: list
          type: customapi
          url: http://192.168.1.27:24940
          method: GET
          mappings:
            - field:
                array:
                  2: total
              label: total
              format: number
              suffix: "GB"
            - field: 
                array:
                  2: used
              label: used
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    2: used_percent
                format: percent
                prefix: "("
                suffix: ")"
            - field: 
                array:
                  2: free
              label: free
              format: number
              suffix: "GB"
              additionalField:
                field:
                  array:
                    2: free_percent
                format: percent
                prefix: "("
                suffix: ")"
    - MCache:
        widget:
          display: list
          type: customapi
          url: http://192.168.1.27:24940
          method: GET
          mappings:
            - field:
                cache:
                  0: total
              label: total
              format: number
              suffix: "GB"
            - field: 
                cache:
                  0: used
              label: used
              format: number
              suffix: "GB"
              additionalField:
                field:
                  cache:
                    0: used_percent
                format: percent
                prefix: "("
                suffix: ")"
            - field: 
                cache:
                  0: free
              label: free
              format: number
              suffix: "GB"
              additionalField:
                field:
                  cache:
                    0: free_percent
                format: percent
                prefix: "("
                suffix: ")"
    - VCache:
        widget:
          display: list
          type: customapi
          url: http://192.168.1.27:24940
          method: GET
          mappings:
            - field:
                cache:
                  1: total
              label: total
              format: number
              suffix: "GB"
            - field: 
                cache:
                  1: used
              label: used
              format: number
              suffix: "GB"
              additionalField:
                field:
                  cache:
                    1: used_percent
                format: percent
                prefix: "("
                suffix: ")"
            - field: 
                cache:
                  1: free
              label: free
              format: number
              suffix: "GB"
              additionalField:
                field:
                  cache:
                    1: free_percent
                format: percent
                prefix: "("
                suffix: ")"

#- Server1:
#    - Dell R630:
#        icon: openmediavault
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: info
#    - CPU:
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: cpu
#    - Memory:
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: memory
#    - Network:
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: network:eth0
#    - Processes:
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: process
#    - CPU temperature:
#        widget:
#          type: glances
#          url: http://192.168.1.26:61208
#          metric: sensor:Package id 0
#    - S.M.A.R.T.:
#        widget: 
#          type: openmediavault
#          url: http://192.168.1.26:800
#          username: xxxxxx
#          password: xxxxxx
#          method: smart.getListBg
          
- Server2:
    - Dell R630:
        icon: openmediavault
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: info
    - CPU:
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: cpu
    - Memory:
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: memory
    - Network:
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: network:eth0
    - Processes:
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: process
    - CPU temperature:
        widget:
          type: glances
          url: http://192.168.1.29:61208
          metric: sensor:Package id 0
    - S.M.A.R.T.:
        widget:
          type: openmediavault
          url: http://192.168.1.29
          username: xxxxxx
          password: xxxxxx
          method: smart.getListBg

 

Thank you for this, just had sent you  a pm for your code. This helps.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.