show the friendly region name

This commit is contained in:
Girish Ramakrishnan
2025-09-26 10:17:03 +02:00
parent 1f78253b38
commit defcf7d220
3 changed files with 31 additions and 15 deletions

View File

@@ -286,31 +286,31 @@ const REGIONS_CONTABO = [
];
const STORAGE_PROVIDERS = [
{ name: 'Amazon S3', value: 's3' },
{ name: 'Amazon S3', value: 's3', regions: REGIONS_S3 },
{ name: 'Backblaze B2 (S3 API)', value: 'backblaze-b2' },
{ name: 'CIFS Mount', value: 'cifs' },
{ name: 'Cloudflare R2', value: 'cloudflare-r2' },
{ name: 'Contabo Object Storage', value: 'contabo-objectstorage' },
{ name: 'DigitalOcean Spaces', value: 'digitalocean-spaces' },
{ name: 'Contabo Object Storage', value: 'contabo-objectstorage', regions: REGIONS_CONTABO },
{ name: 'DigitalOcean Spaces', value: 'digitalocean-spaces', regions: REGIONS_DIGITALOCEAN },
{ name: 'External/Local Disk (EXT4 or XFS)', value: 'disk' },
{ name: 'EXT4 Disk', value: 'ext4' },
{ name: 'Exoscale SOS', value: 'exoscale-sos' },
{ name: 'Exoscale SOS', value: 'exoscale-sos', regions: REGIONS_EXOSCALE },
{ name: 'Filesystem', value: 'filesystem' },
{ name: 'Filesystem (Mountpoint)', value: 'mountpoint' }, // legacy
{ name: 'Google Cloud Storage', value: 'gcs' },
{ name: 'Hetzner Object Storage', value: 'hetzner-objectstorage' },
{ name: 'Hetzner Object Storage', value: 'hetzner-objectstorage', regions: REGIONS_HETZNER },
{ name: 'IDrive e2', value: 'idrive-e2' },
{ name: 'IONOS (Profitbricks)', value: 'ionos-objectstorage' },
{ name: 'Linode Object Storage', value: 'linode-objectstorage' },
{ name: 'IONOS (Profitbricks)', value: 'ionos-objectstorage', regions: REGIONS_IONOS },
{ name: 'Linode Object Storage', value: 'linode-objectstorage', regions: REGIONS_LINODE },
{ name: 'Minio', value: 'minio' },
{ name: 'NFS Mount', value: 'nfs' },
{ name: 'OVH Object Storage', value: 'ovh-objectstorage' },
{ name: 'OVH Object Storage', value: 'ovh-objectstorage', regions: REGIONS_OVH },
{ name: 'S3 API Compatible (v4)', value: 's3-v4-compat' },
{ name: 'Scaleway Object Storage', value: 'scaleway-objectstorage' },
{ name: 'Scaleway Object Storage', value: 'scaleway-objectstorage', regions: REGIONS_SCALEWAY },
{ name: 'SSHFS Mount', value: 'sshfs' },
{ name: 'UpCloud Object Storage', value: 'upcloud-objectstorage' },
{ name: 'Vultr Object Storage', value: 'vultr-objectstorage' },
{ name: 'Wasabi', value: 'wasabi' },
{ name: 'Vultr Object Storage', value: 'vultr-objectstorage', regions: REGIONS_VULTR },
{ name: 'Wasabi', value: 'wasabi', regions: REGIONS_WASABI },
{ name: 'XFS Disk', value: 'xfs' },
];

View File

@@ -1,6 +1,6 @@
import { prettyBinarySize } from '@cloudron/pankow/utils';
import { ISTATES } from './constants.js';
import { ISTATES, STORAGE_PROVIDERS } from './constants.js';
// https://stackoverflow.com/questions/3665115/how-to-create-a-file-in-memory-for-user-to-download-but-not-through-server#18197341
function download(filename, text) {
@@ -29,6 +29,15 @@ function s3like(provider) {
|| provider === 'contabo-objectstorage';
}
function regionName(provider, endpoint) {
const storageProvider = STORAGE_PROVIDERS.find(sp => sp.value === provider);
const regions = storageProvider.regions;
if (!regions) return endpoint;
const region = regions.find(r => r.value === endpoint);
if (!region) return endpoint;
return region.name;
}
function eventlogDetails(eventLog, app = null, appIdContext = '') {
const ACTION_ACTIVATE = 'cloudron.activate';
const ACTION_PROVISION = 'cloudron.provision';
@@ -610,6 +619,7 @@ export {
download,
mountlike,
s3like,
regionName,
eventlogDetails,
eventlogSource,
taskNameFromInstallationState,
@@ -623,6 +633,7 @@ export default {
download,
mountlike,
s3like,
regionName,
eventlogDetails,
eventlogSource,
taskNameFromInstallationState,

View File

@@ -16,7 +16,7 @@ import { TASK_TYPES } from '../constants.js';
import BackupSitesModel from '../models/BackupSitesModel.js';
import ProfileModel from '../models/ProfileModel.js';
import TasksModel from '../models/TasksModel.js';
import { mountlike, s3like } from '../utils.js';
import { regionName, mountlike } from '../utils.js';
const profileModel = ProfileModel.create();
const tasksModel = TasksModel.create();
@@ -231,14 +231,19 @@ onMounted(async () => {
<div><b style="font-size: 16px">{{ site.name }}</b></div>
<div>
<i v-if="site.encrypted" class="fa-solid fa-lock"></i>
{{ site.provider }}/{{ site.format }} @
{{ site.provider }}/{{ site.format }}
<span v-if="site.provider === 'filesystem' || mountlike(site.provider)">
({{ site.config.noHardlinks ? 'no hardlinks' : 'hardlinks' }})
</span>
</div>
<div>
<span v-if="site.provider === 'filesystem'">{{ site.config.backupDir }}{{ (site.config.prefix ? `/${site.config.prefix}` : '') }}</span>
<span v-else-if="site.provider === 'disk' || site.provider === 'ext4' || site.provider === 'xfs' || site.provider === 'mountpoint'">{{ site.config.mountOptions.diskPath || site.config.mountPoint }}{{ (site.config.prefix ? `/${site.config.prefix}` : '') }}</span>
<span v-else-if="site.provider === 'cifs' || site.provider === 'nfs' || site.provider === 'sshfs'">{{ site.config.mountOptions.host }}:{{ site.config.mountOptions.remoteDir }}{{ (site.config.prefix ? `/${site.config.prefix}` : '') }}</span>
<span v-else-if="site.provider === 's3'">{{ site.config.region + ' ' + site.config.bucket + (site.config.prefix ? `/${site.config.prefix}` : '') }}</span>
<span v-else-if="site.provider === 'minio'">{{ site.config.endpoint + ' ' + site.config.bucket + (site.config.prefix ? `/${site.config.prefix}` : '') }}</span>
<span v-else-if="site.provider === 'gcs'">{{ site.config.endpoint + ' ' + site.config.bucket + (site.config.prefix ? `/${site.config.prefix}` : '') }}</span>
<span v-else>{{ site.config.bucket + (site.config.prefix ? `/${site.config.prefix}` : '') }}</span>
<span v-else>{{ regionName(site.provider, site.config.endpoint) + ' ' + site.config.bucket + (site.config.prefix ? `/${site.config.prefix}` : '') }}</span>
</div>
<div class="backup-site-task">