Compare commits

..

52 Commits

Author SHA1 Message Date
shamoon
99efe2e7aa Merge pull request #1051 from benphelps/dependabot/github_actions/actions/checkout-3 2023-02-24 11:36:59 -08:00
dependabot[bot]
79df42a743 Bump actions/checkout from 2 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-24 17:03:59 +00:00
Anonymous
555e9463e8 Translated using Weblate (Thai)
Currently translated at 13.0% (47 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-24 16:54:25 +01:00
Anonymous
a2424ea0bd Translated using Weblate (Latvian)
Currently translated at 32.9% (119 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-02-24 16:54:25 +01:00
Anonymous
743e9dcbf8 Translated using Weblate (Japanese)
Currently translated at 4.1% (15 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-02-24 16:54:24 +01:00
Anonymous
350bb1ff25 Translated using Weblate (Ukrainian)
Currently translated at 99.4% (359 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-24 16:54:24 +01:00
Anonymous
bf50eaff17 Translated using Weblate (Esperanto)
Currently translated at 28.5% (103 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-02-24 16:54:24 +01:00
Anonymous
2594068fd0 Translated using Weblate (Hindi)
Currently translated at 2.4% (9 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-02-24 16:54:24 +01:00
Anonymous
72f66385ae Translated using Weblate (Malay)
Currently translated at 70.0% (253 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-02-24 16:54:23 +01:00
Anonymous
9cae86d88b Translated using Weblate (Danish)
Currently translated at 54.8% (198 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-02-24 16:54:23 +01:00
Anonymous
9f5b381b17 Translated using Weblate (Czech)
Currently translated at 69.2% (250 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-24 16:54:23 +01:00
Anonymous
707bb93ad6 Translated using Weblate (Arabic)
Currently translated at 72.5% (262 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-02-24 16:54:22 +01:00
Anonymous
dfcd4d8e84 Translated using Weblate (Serbian)
Currently translated at 2.4% (9 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-02-24 16:54:22 +01:00
Anonymous
3d99302e33 Translated using Weblate (Turkish)
Currently translated at 87.8% (317 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-24 16:54:21 +01:00
Anonymous
a5036a701b Translated using Weblate (Bulgarian)
Currently translated at 12.7% (46 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-02-24 16:54:21 +01:00
Anonymous
3aa0fd594c Translated using Weblate (Telugu)
Currently translated at 60.1% (217 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-02-24 16:54:21 +01:00
Anonymous
67c60b4256 Translated using Weblate (Finnish)
Currently translated at 49.3% (178 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-02-24 16:54:20 +01:00
Anonymous
42675c2e71 Translated using Weblate (Yue)
Currently translated at 32.6% (118 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
2023-02-24 16:54:20 +01:00
Anonymous
35098385c0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 69.8% (252 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-24 16:54:19 +01:00
Anonymous
409204c564 Translated using Weblate (Romanian)
Currently translated at 37.9% (137 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-02-24 16:54:19 +01:00
Anonymous
7ad59dc85f Translated using Weblate (Hebrew)
Currently translated at 27.9% (101 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-02-24 16:54:19 +01:00
Anonymous
f87d3d4ae3 Translated using Weblate (Hungarian)
Currently translated at 29.9% (108 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-02-24 16:54:19 +01:00
Anonymous
c84fecd981 Translated using Weblate (Croatian)
Currently translated at 79.2% (286 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-02-24 16:54:18 +01:00
Anonymous
321ede5297 Translated using Weblate (Swedish)
Currently translated at 36.5% (132 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-02-24 16:54:18 +01:00
Anonymous
6bea32ad83 Translated using Weblate (Polish)
Currently translated at 78.9% (285 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-02-24 16:54:18 +01:00
Anonymous
2a73b603c9 Translated using Weblate (Catalan)
Currently translated at 71.4% (258 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-02-24 16:54:17 +01:00
Anonymous
8203537915 Translated using Weblate (Chinese (Traditional))
Currently translated at 98.0% (354 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-24 16:54:17 +01:00
Anonymous
c56f48fb42 Translated using Weblate (Dutch)
Currently translated at 24.3% (88 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-02-24 16:54:17 +01:00
Anonymous
743267ba7b Translated using Weblate (Vietnamese)
Currently translated at 12.1% (44 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-02-24 16:54:16 +01:00
Anonymous
218327b4a2 Translated using Weblate (Norwegian Bokmål)
Currently translated at 21.8% (79 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-02-24 16:54:16 +01:00
Anonymous
7754b8b8f1 Translated using Weblate (Italian)
Currently translated at 79.7% (288 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-02-24 16:54:16 +01:00
Anonymous
c0df7db05e Translated using Weblate (Chinese (Simplified))
Currently translated at 91.6% (331 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-24 16:54:15 +01:00
Anonymous
2c8aea1cd9 Translated using Weblate (Russian)
Currently translated at 13.2% (48 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-02-24 16:54:15 +01:00
Anonymous
d0ba6aebbf Translated using Weblate (Portuguese)
Currently translated at 70.9% (256 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-02-24 16:54:15 +01:00
Anonymous
5ed50bbb57 Translated using Weblate (French)
Currently translated at 99.4% (359 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-24 16:54:14 +01:00
Anonymous
311b7b1cea Translated using Weblate (Spanish)
Currently translated at 99.4% (359 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-24 16:54:14 +01:00
Anonymous
101b706cd9 Translated using Weblate (German)
Currently translated at 63.1% (228 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-02-24 16:54:14 +01:00
Bruno Rossetto
bdfb09b1a4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 70.1% (252 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-24 16:53:50 +01:00
shamoon
65c06adb5a Merge pull request #1026 from Oupsman/pterodactyl
Pterodactyl widget: initial commit
2023-02-24 07:53:45 -08:00
shamoon
8c26da6655 Merge pull request #1047 from jameswynn/chart-commons-version 2023-02-24 07:50:19 -08:00
James Wynn
c0d58d8206 Typo in common lib version 2023-02-24 08:58:41 -06:00
shamoon
c2136e8353 Merge pull request #1044 from jameswynn/helm-chart 2023-02-24 06:52:00 -08:00
Dan
bc26d4f3b3 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (359 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-24 02:46:32 +01:00
James Wynn
563cc9ce60 Migrated helm chart from jameswynn/helm-charts
Standard chart release pipeline from:
https://helm.sh/docs/howto/chart_releaser_action/
2023-02-23 14:36:55 -06:00
shamoon
060d5afcaa Simplify pterodactyl to only show server / node counts 2023-02-23 07:50:13 -08:00
Benoit SERRA
8e9ce016b1 Pterodactyl widget: initial commit 2023-02-23 07:50:13 -08:00
shamoon
b65f6fca19 Merge pull request #1040 from jameswynn/external-services
Added "external" boolean annotation to specify external services
2023-02-22 08:27:06 -08:00
James Wynn
f8f96645b0 Added "external" boolean annotation to specify external services
External services define a kubernetes service pointing to an application
hosted outside of the cluster. These services should not attempt to get
the status based on kubernetes deployments. The new boolean flag disables
this functionality. Since this is an edge case, the default value is "false".
2023-02-22 09:05:26 -06:00
Anonymous
81a2e1e692 Translated using Weblate (Czech)
Currently translated at 69.6% (250 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-22 06:14:06 +01:00
Chun Chi Hsieh
50a9bdbcb8 Translated using Weblate (Chinese (Traditional))
Currently translated at 98.6% (354 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-22 06:14:05 +01:00
shamoon
601edb8d6b Merge pull request #1033 from DanBrezeanu/877-remove-bottom-version
Configuration option for removing bottom version
2023-02-21 08:20:40 -08:00
Dan Brezeanu
9eafac346b Configuration option for removing bottom version 2023-02-21 10:11:24 +02:00
53 changed files with 707 additions and 124 deletions

25
.github/workflows/chart-publish.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
name: Chart Publish
on:
push:
branches:
- main
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.1.0
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

View File

View File

@@ -0,0 +1,20 @@
---
apiVersion: v2
description: Chart for benphelps' Homepage
icon: https://github.com/benphelps/homepage/blob/de584eae8f12a0d257e554e9511ef19bd2a1232c/public/mstile-150x150.png
name: homepage
version: 0.1.0
appVersion: v0.6.9
sources:
- https://github.com/benphelps/homepage/charts/homepage
- https://github.com/benphelps/homepage/
maintainers:
- name: jameswynn
dependencies:
- name: common
repository: https://bjw-s.github.io/helm-charts
version: 1.2.1
annotations:
artifacthub.io/changes: |-
- kind: added
description: Initial version

View File

@@ -0,0 +1,36 @@
image:
repository: ghcr.io/benphelps/homepage
tag: kubernetes
pullPolicy: Always
enableRbac: true
serviceAccount:
create: true
name: homepage-test
config:
kubernetes:
mode: cluster
widgets:
- resources:
backend: kubernetes
expanded: true
cpu: true
memory: true
ingress:
main:
enabled: true
labels:
homepage/enabled: "true"
annotations:
homepage/name: "Homepage"
homepage/description: "A modern, secure, highly customizable application dashboard."
homepage/group: "My Group"
homepage/icon: "homepage.png"
hosts:
- host: &host "homepage.bogusdomain.test"
paths:
- path: /
pathType: Prefix

48
charts/homepage/readme.md Normal file
View File

@@ -0,0 +1,48 @@
# Homepage (benphelps)
A modern (fully static, fast), secure (fully proxied), highly customizable application dashboard with integrations for more than 25 services and translations for over 15 languages. Easily configured via YAML files (or discovery via docker labels).
[Homepage](https://github.com/benphelps/homepage)
## TL;DR
```bash
helm repo add homepage http://benphelps.github.io/homepage
helm install my-release homepage/homepage
```
## Introduction
This chart bootstraps a [Homepage](https://github.com/benphelps/homepage) deployment on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
## Prerequisites
- Kubernetes 1.19+
- Helm 3.2.0+
## Installing the Chart
To install the chart with the release name `my-release`:
```bash
helm install my-release homepage/homepage
```
The command deploys Homepage on the Kubernetes cluster in the default configuration. The [Parameters](#parameters) section lists the parameters that can be configured during installation.
> **Tip**: List all releases using `helm list`
## Uninstalling the Chart
To uninstall/delete the `my-release` deployment:
```console
helm delete my-release
```
## Parameters
This chart is based on [bjw-s library](https://bjw-s.github.io/helm-charts/docs/common-library/introduction/) and
shares many configuration options with its derived [app-template](https://bjw-s.github.io/helm-charts/docs/app-template/introduction/).
See the [values files](values.yaml) for more examples.

View File

@@ -0,0 +1,31 @@
---
{{- include "bjw-s.common.loader.init" . }}
{{- define "app-template.hardcodedValues" -}}
# Set the nameOverride based on the release name if no override has been set
{{ if not .Values.global.nameOverride }}
global:
nameOverride: "{{ .Release.Name }}"
{{ end }}
{{- end -}}
{{- $_ := mergeOverwrite .Values (include "app-template.hardcodedValues" . | fromYaml) -}}
{{/* Append the configMap volume to the volumes */}}
{{- define "homepage.configVolume" -}}
enabled: "true"
mountPath: "/app/config"
type: "custom"
volumeSpec:
configMap:
name: {{ (default (include "bjw-s.common.lib.chart.names.fullname" .) .Values.config.useExistingConfigMap) }}
{{- end -}}
{{- $_ := set .Values.persistence "homepage-config" (include "homepage.configVolume" . | fromYaml) -}}
{{ if .Values.enableRbac }}
{{- $_ := set .Values.serviceAccount "create" "true" -}}
{{ end }}
{{/* Render the templates */}}
{{ include "bjw-s.common.loader.generate" . }}

View File

@@ -0,0 +1,34 @@
{{ if not .Values.config.useExistingConfigMap }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "bjw-s.common.lib.chart.names.fullname" . }}
labels:
{{- include "bjw-s.common.lib.metadata.allLabels" . | nindent 4 }}
data:
bookmarks.yaml: {{- if .Values.config.bookmarks }} |
{{- .Values.config.bookmarks | toYaml | nindent 4}}
{{- else }} ""
{{- end }}
docker.yaml: {{- if .Values.config.docker }} |
{{- .Values.config.docker | toYaml | nindent 4 }}
{{- else }} ""
{{- end }}
kubernetes.yaml: {{- if .Values.config.kubernetes }} |
{{- .Values.config.kubernetes | toYaml | nindent 4 }}
{{- else }} ""
{{- end }}
services.yaml: {{- if .Values.config.services }} |
{{- .Values.config.services | toYaml | nindent 4 }}
{{- else }} ""
{{- end }}
settings.yaml: {{- if .Values.config.settings }} |
{{- .Values.config.settings | toYaml | nindent 4 }}
{{- else }} ""
{{- end }}
widgets.yaml: {{- if .Values.config.widgets }} |
{{- .Values.config.widgets | toYaml | nindent 4 }}
{{- else }} ""
{{- end }}
{{ end }}

View File

@@ -0,0 +1,71 @@
{{- include "bjw-s.common.loader.init" . }}
{{ if .Values.enableRbac }}
{{- $serviceAccountName := include "bjw-s.common.lib.chart.names.serviceAccountName" . -}}
---
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: {{ $serviceAccountName }}
{{- with (merge (.Values.labels | default dict) (include "bjw-s.common.lib.metadata.allLabels" $ | fromYaml)) }}
labels: {{- toYaml . | nindent 4 }}
{{- end }}
annotations:
kubernetes.io/service-account.name: {{ $serviceAccountName }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ $serviceAccountName }}
{{- with (merge (.Values.labels | default dict) (include "bjw-s.common.lib.metadata.allLabels" $ | fromYaml)) }}
labels: {{- toYaml . | nindent 4 }}
{{- end }}
{{- with (merge (.Values.annotations | default dict) (include "bjw-s.common.lib.metadata.globalAnnotations" $ | fromYaml)) }}
annotations: {{- toYaml . | nindent 4 }}
{{- end }}
rules:
- apiGroups:
- ""
resources:
- namespaces
- pods
- nodes
verbs:
- get
- list
- apiGroups:
- extensions
- networking.k8s.io
resources:
- ingresses
verbs:
- get
- list
- apiGroups:
- metrics.k8s.io
resources:
- nodes
- pods
verbs:
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ $serviceAccountName }}
{{- with (merge (.Values.labels | default dict) (include "bjw-s.common.lib.metadata.allLabels" $ | fromYaml)) }}
labels: {{- toYaml . | nindent 4 }}
{{- end }}
{{- with (merge (.Values.annotations | default dict) (include "bjw-s.common.lib.metadata.globalAnnotations" $ | fromYaml)) }}
annotations: {{- toYaml . | nindent 4 }}
{{- end }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ $serviceAccountName }}
subjects:
- kind: ServiceAccount
name: {{ $serviceAccountName }}
namespace: {{ .Release.Namespace }}
{{ end }}

114
charts/homepage/values.yaml Normal file
View File

@@ -0,0 +1,114 @@
image:
repository: ghcr.io/benphelps/homepage
# tag: v0.6.0
# Enable RBAC. RBAC is necessary to use Kubernetes integration
enableRbac: false
serviceAccount:
# Specify a different service account name
name: homepage
# Create service account. Needed when RBAC is enabled.
create: false
service:
main:
ports:
http:
port: 3000
controller:
strategy: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
# Enable the ingress to expose Homepage to the network.
ingress:
main:
enabled: false
# labels:
# # This label will enable discover of this deployment in Homepage
# gethomepage.dev/enabled: "true"
# annotations:
# # These annotations will configure how this deployment is shown in Homepage
# gethomepage.dev/name: "Homepage"
# gethomepage.dev/description: "A modern, secure, highly customizable application dashboard."
# gethomepage.dev/group: "A New Group"
# gethomepage.dev/icon: "homepage.png"
# ingressClassName: "nginx"
# hosts:
# - host: &host "homepage.local"
# paths:
# - path: /
# pathType: Prefix
# tls:
# - hosts:
# - *host
# All the config files for Homepage can be specified under their relevant config block.
config:
# To use an existing ConfigMap uncomment this line and specify the name
# useExistingConfigMap: existing-homepage-configmap
bookmarks:
- Developer:
- Github:
- abbr: GH
href: https://github.com/
services:
- My First Group:
- My First Service:
href: http://localhost/
description: Homepage is awesome
- My Second Group:
- My Second Service:
href: http://localhost/
description: Homepage is the best
- My Third Group:
- My Third Service:
href: http://localhost/
description: Homepage is 😎
widgets:
- resources:
# change backend to 'kubernetes' to use Kubernetes integration. Requires RBAC.
backend: resources
expanded: true
cpu: true
memory: true
- search:
provider: duckduckgo
target: _blank
## Uncomment to enable Kubernetes integration
# - kubernetes:
# cluster:
# show: true
# cpu: true
# memory: true
# showLabel: true
# label: "cluster"
# nodes:
# show: true
# cpu: true
# memory: true
# showLabel: true
kubernetes:
# change mode to 'cluster' to use RBAC service account
mode: disable
docker:
settings:
persistence:
logs:
enabled: true
type: emptyDir
mountPath: /app/config/logs
# resources:
# requests:
# memory: 10Mi
# cpu: 10m
# limits:
# memory: 200Mi
# cpu: 500m

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -17,7 +17,7 @@
"status": "Status",
"information": "Informace",
"url": "URL",
"raw_error": "",
"raw_error": "Raw Error",
"response_data": "Data odpovědi"
},
"weather": {
@@ -375,8 +375,8 @@
"no_devices": "No Device Data Received"
},
"common": {
"bibyterate": "",
"bibitrate": ""
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
},
"omada": {
"connectedAp": "Připojené APs",
@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -517,5 +517,9 @@
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Estado",
"last_ping": "Último Ping",
"never": "Aún no hay pings"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Statut",
"last_ping": "Dernier Ping",
"never": "Pas de Ping"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"grace": "In Grace Period",
"down": "Offline",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -33,14 +33,14 @@
"status": "Status",
"information": "Informação",
"url": "URL",
"raw_error": "Raw Error",
"raw_error": "Erro Bruto",
"response_data": "Dados de Resposta"
},
"weather": {
"current": "Localização atual",
"allow": "Clique para permitir",
"updating": "Atualizando",
"wait": "Aguarde, por favor"
"wait": "Por favor aguarde"
},
"search": {
"placeholder": "Buscar…"
@@ -134,7 +134,7 @@
},
"pihole": {
"queries": "Consultas",
"blocked": "Bloquado",
"blocked": "Bloqueados",
"gravity": "Gravity"
},
"adguard": {
@@ -182,7 +182,7 @@
"authentik": {
"users": "Usuários",
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)"
"failedLoginsLast24H": "Logins Falhos (24h)"
},
"proxmox": {
"mem": "Memória",
@@ -199,13 +199,13 @@
"wlan_users": "Usuarios WLAN",
"up": "LIGADO",
"down": "CÁIDO",
"wait": "Por favor guarde",
"wait": "Por favor aguarde",
"lan": "LAN",
"wlan": "WLAN",
"devices": "Dispositivos",
"lan_devices": "Dispositivos LAN",
"wlan_devices": "Dispositivos WLAN",
"empty_data": "Subsystem status unknown"
"empty_data": "Status de Subsistema Desconhecido"
},
"plex": {
"streams": "Transmissões ativas",
@@ -215,81 +215,81 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Por favor aguarde"
},
"changedetectionio": {
"totalObserved": "Observados",
"diffsDetected": "Mudanças"
},
"wmo": {
"1-night": "Mainly Clear",
"2-day": "Partly Cloudy",
"1-night": "Principalmente Limpo",
"2-day": "Parcialmente Nublado",
"2-night": "Parcialmente nublado",
"3-day": "Nublado",
"3-night": "Nublado",
"45-day": "Névoa",
"45-night": "Foggy",
"48-day": "Foggy",
"48-night": "Foggy",
"56-night": "Light Freezing Drizzle",
"57-day": "Freezing Drizzle",
"99-day": "Thunderstorm With Hail",
"99-night": "Thunderstorm With Hail",
"45-night": "Névoa",
"48-day": "Névoa",
"48-night": "Névoa",
"56-night": "Leve Garoa Congelante",
"57-day": "Garoa Congelante",
"99-day": "Trovoada Com Granizo",
"99-night": "Trovoada Com Granizo",
"0-day": "Ensolarado",
"53-day": "Drizzle",
"53-day": "Garoando",
"0-night": "Limpo",
"1-day": "Mainly Sunny",
"51-day": "Light Drizzle",
"51-night": "Light Drizzle",
"53-night": "Drizzle",
"55-day": "Heavy Drizzle",
"55-night": "Heavy Drizzle",
"56-day": "Light Freezing Drizzle",
"57-night": "Freezing Drizzle",
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Rain",
"63-night": "Rain",
"65-day": "Heavy Rain",
"65-night": "Heavy Rain",
"66-day": "Freezing Rain",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"71-day": "Light Snow",
"71-night": "Light Snow",
"73-day": "Snow",
"73-night": "Snow",
"75-day": "Heavy Snow",
"75-night": "Heavy Snow",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
"80-night": "Light Showers",
"81-day": "Showers",
"81-night": "Showers",
"82-day": "Heavy Showers",
"82-night": "Heavy Showers",
"85-day": "Snow Showers",
"85-night": "Snow Showers",
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"95-day": "Thunderstorm",
"95-night": "Thunderstorm",
"96-day": "Thunderstorm With Hail",
"1-day": "Principalmente Ensolarado",
"51-day": "Leve Garoa",
"51-night": "Leve Garoa",
"53-night": "Garoando",
"55-day": "Garoa Pesada",
"55-night": "Garoa Pesada",
"56-day": "Leve Garoa Congelante",
"57-night": "Garoa Congelante",
"61-day": "Chuva Leve",
"61-night": "Chuva Leve",
"63-day": "Chuva",
"63-night": "Chuva",
"65-day": "Chuva Pesada",
"65-night": "Chuva Pesada",
"66-day": "Chuva Congelante",
"66-night": "Chuva Congelante",
"67-day": "Chuva Congelante",
"67-night": "Chuva Congelante",
"71-day": "Neve Leve",
"71-night": "Neve Leve",
"73-day": "Neve",
"73-night": "Neve",
"75-day": "Neve Pesada",
"75-night": "Neve Pesada",
"77-day": "Grãos de Neve",
"77-night": "Grãos de Neve",
"80-day": "Chuviscos Leve",
"80-night": "Chuviscos Leve",
"81-day": "Chuviscos",
"81-night": "Chuviscos",
"82-day": "Chuviscos Pesado",
"82-night": "Chuviscos Pesado",
"85-day": "Precipitação de Neve",
"85-night": "Precipitação de Neve",
"86-day": "Precipitação de Neve",
"86-night": "Precipitação de Neve",
"95-day": "Tempestade",
"95-night": "Trovoada",
"96-day": "Trovoada Com Granizo",
"96-night": "Thunderstorm With Hail"
},
"quicklaunch": {
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"bookmark": "Favorito",
"service": "Serviço",
"search": "Busca",
"custom": "Personalizado"
},
"homebridge": {
"available_update": "System",
"updates": "Updates",
"update_available": "Update Available",
"up_to_date": "Up to Date",
"available_update": "Sistema",
"updates": "Atualizações",
"update_available": "Atualização Disponível",
"up_to_date": "Atualizado",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}"
},
@@ -371,7 +371,7 @@
"unread": "Não Lidos"
},
"nextdns": {
"wait": "Please Wait",
"wait": "Por favor aguarde",
"no_devices": "No Device Data Received"
},
"common": {
@@ -415,8 +415,8 @@
"layers": "Layers"
},
"medusa": {
"wanted": "Wanted",
"queued": "Queued",
"wanted": "Desejado",
"queued": "Na fila",
"series": "Series"
},
"octoprint": {
@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -517,5 +517,9 @@
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"nodes": "Nodes",
"servers": "Servers"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -500,13 +500,17 @@
"records_total": "Довжина черги"
},
"healthchecks": {
"new": "New",
"up": "Online",
"down": "Offline",
"grace": "In Grace Period",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
"new": "Новий",
"up": "Онлайн",
"down": "Офлайн",
"grace": "У пільговий період",
"paused": "Призупинено",
"status": "Стан",
"last_ping": "Останній пінг",
"never": "Пінгів ще немає"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -508,5 +508,9 @@
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -49,7 +49,7 @@
"used": "已使用",
"load": "負載",
"cpu": "CPU",
"mem": "MEM"
"mem": "記憶體"
},
"nzbget": {
"rate": "速率",
@@ -197,15 +197,15 @@
"wan": "WAN",
"lan_users": "LAN使用者",
"wlan_users": "WLAN使用者",
"up": "UP",
"down": "DOWN",
"up": "上線",
"down": "離線",
"wait": "請稍後",
"lan": "LAN",
"wlan": "WLAN",
"devices": "設備",
"lan_devices": "LAN設備",
"wlan_devices": "WLAN設備",
"empty_data": "Subsystem status unknown"
"empty_data": "子系統狀態未知"
},
"plex": {
"streams": "正在播放",
@@ -404,7 +404,7 @@
},
"opnsense": {
"cpu": "CPU負載",
"memory": "Active Memory",
"memory": "記憶體",
"wanUpload": "WAN上傳",
"wanDownload": "WAN下載"
},
@@ -454,45 +454,45 @@
"books": "書刊"
},
"mylar": {
"series": "Series",
"issues": "Issues",
"wanted": "Wanted"
"series": "系列",
"issues": "出版",
"wanted": "關注中"
},
"photoprism": {
"albums": "Albums",
"photos": "Photos",
"videos": "Videos",
"people": "People"
"albums": "相簿",
"photos": "照片",
"videos": "影片",
"people": "人物"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
"days": "",
"uptime": "運行時間",
"volumeAvailable": "剩餘容量"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
"queue": "佇列",
"processing": "處理中",
"processed": "已處理",
"time": "時間"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
"dashboards": "控制面板",
"datasources": "數據來源",
"totalalerts": "警報總數",
"alertstriggered": "觸發的警報"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
"cpuload": "處理器負載",
"memoryusage": "記憶體用量",
"freespace": "可用空間",
"activeusers": "活躍用戶"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
"status": "狀態",
"size": "檔案大小",
"lastrun": "上次運行",
"nextrun": "下次運行",
"failed": "失敗"
},
"unmanic": {
"active_workers": "Active Workers",
@@ -500,13 +500,17 @@
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
"new": "新建立",
"up": "上線",
"grace": "延緩中",
"down": "離線",
"paused": "擱置中",
"status": "狀態",
"last_ping": "上次檢查",
"never": "尚未檢查"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
}
}

View File

@@ -91,7 +91,7 @@ export default function Item({ service }) {
<span className="sr-only">View container stats</span>
</button>
)}
{service.app && (
{(service.app && !service.external) && (
<button
type="button"
onClick={() => (statsOpen ? closeStats() : setStatsOpen(true))}

View File

@@ -175,7 +175,7 @@ function Home({ initialSettings }) {
const { data: services } = useSWR("/api/services");
const { data: bookmarks } = useSWR("/api/bookmarks");
const { data: widgets } = useSWR("/api/widgets");
const servicesAndBookmarks = [...services.map(sg => sg.services).flat(), ...bookmarks.map(bg => bg.bookmarks).flat()]
useEffect(() => {
@@ -310,7 +310,7 @@ function Home({ initialSettings }) {
</div>
<div className="flex p-8 pt-4 w-full justify-end">
<Version />
{!initialSettings?.hideVersion && <Version />}
</div>
</div>
</>

View File

@@ -164,7 +164,11 @@ export async function servicesFromKubernetes() {
weight: ingress.metadata.annotations[`${ANNOTATION_BASE}/weight`] || '0',
icon: ingress.metadata.annotations[`${ANNOTATION_BASE}/icon`] || '',
description: ingress.metadata.annotations[`${ANNOTATION_BASE}/description`] || '',
external: false,
};
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/external`]) {
constructedService.external = String(ingress.metadata.annotations[`${ANNOTATION_BASE}/external`]).toLowerCase() === "true"
}
if (ingress.metadata.annotations[ANNOTATION_POD_SELECTOR]) {
constructedService.podSelector = ingress.metadata.annotations[ANNOTATION_POD_SELECTOR];
}

View File

@@ -46,6 +46,8 @@ export default async function credentialedProxyHandler(req, res, map) {
} else if (widget.type === "cloudflared") {
headers["X-Auth-Email"] = `${widget.email}`;
headers["X-Auth-Key"] = `${widget.key}`;
} else if (widget.type === "pterodactyl") {
headers.Authorization = `Bearer ${widget.key}`;
} else {
headers["X-API-Key"] = `${widget.key}`;
}

View File

@@ -52,6 +52,7 @@ const components = {
portainer: dynamic(() => import("./portainer/component")),
prowlarr: dynamic(() => import("./prowlarr/component")),
proxmox: dynamic(() => import("./proxmox/component")),
pterodactyl: dynamic(() => import("./pterodactyl/component")),
pyload: dynamic(() => import("./pyload/component")),
qbittorrent: dynamic(() => import("./qbittorrent/component")),
radarr: dynamic(() => import("./radarr/component")),
@@ -76,4 +77,4 @@ const components = {
uptimekuma: dynamic(() => import("./uptimekuma/component")),
};
export default components;
export default components;

View File

@@ -0,0 +1,34 @@
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const {widget} = service;
const {data: nodesData, error: nodesError} = useWidgetAPI(widget, "nodes");
if (nodesError) {
return <Container error={ nodesError } />;
}
if (!nodesData) {
return (
<Container service={service}>
<Block label="pterodactyl.nodes" />
<Block label="pterodactyl.servers" />
</Container>
);
}
const totalServers = nodesData.data.reduce((total, node) =>
node.attributes?.relationships?.servers?.data?.length ?? 0 + total, 0);
return (
<Container service={service}>
<Block label="pterodactyl.nodes" value={nodesData.data.length} />
<Block label="pterodactyl.servers" value={totalServers} />
</Container>
);
}

View File

@@ -0,0 +1,17 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/application/{endpoint}",
proxyHandler: credentialedProxyHandler,
mappings: {
nodes: {
endpoint: "nodes?include=servers",
validate: [
"data"
]
},
},
};
export default widget;

View File

@@ -46,6 +46,7 @@ import plex from "./plex/widget";
import portainer from "./portainer/widget";
import prowlarr from "./prowlarr/widget";
import proxmox from "./proxmox/widget";
import pterodactyl from "./pterodactyl/widget";
import pyload from "./pyload/widget";
import qbittorrent from "./qbittorrent/widget";
import radarr from "./radarr/widget";
@@ -119,6 +120,7 @@ const widgets = {
portainer,
prowlarr,
proxmox,
pterodactyl,
pyload,
qbittorrent,
radarr,
@@ -144,4 +146,4 @@ const widgets = {
uptimekuma,
};
export default widgets;
export default widgets;