mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
storage: recurring volume snapshot form (#99)
This adds the recurring volume snapshot form. Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com> Co-authored-by: Rohit Yadav <rohit@apache.org>
This commit is contained in:
parent
b82957189b
commit
cc4536908a
@ -89,11 +89,12 @@ export default {
|
||||
},
|
||||
{
|
||||
api: 'createSnapshotPolicy',
|
||||
icon: 'video-camera',
|
||||
icon: 'clock-circle',
|
||||
label: 'Recurring Snapshots',
|
||||
dataView: true,
|
||||
show: (record) => { return record.state === 'Ready' },
|
||||
args: ['volumeid', 'intervaltype', 'schedule', 'maxsnaps', 'timezone'],
|
||||
popup: true,
|
||||
component: () => import('@/views/storage/RecurringSnapshotVolume.vue'),
|
||||
mapping: {
|
||||
volumeid: {
|
||||
value: (record) => { return record.id }
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
"Instances": "Instances",
|
||||
"LDAP Configuration": "LDAP Configuration",
|
||||
"Management Servers": "Management Servers",
|
||||
"monday": "Monday",
|
||||
"Monitor": "Monitor",
|
||||
"Network": "Network",
|
||||
"Network Offerings": "Network Offerings",
|
||||
@ -43,6 +44,8 @@
|
||||
"System Offerings": "System Offerings",
|
||||
"System VMs": "System VMs",
|
||||
"Templates": "Templates",
|
||||
"tuesday": "Tuesday",
|
||||
"thursday": "Thursday",
|
||||
"Users": "Users",
|
||||
"VM Snapshots": "VM Snapshots",
|
||||
"VPC": "VPC",
|
||||
@ -208,6 +211,7 @@
|
||||
"forceencap": "Force UDP Encapsulation of ESP Packets",
|
||||
"forgedTransmits": "Forged Transmits",
|
||||
"format": "Format",
|
||||
"friday": "Friday",
|
||||
"fwdevicecapacity": "Capacity",
|
||||
"fwdeviceid": "ID",
|
||||
"fwdevicename": "Type",
|
||||
@ -321,6 +325,7 @@
|
||||
"isstaticnat": "Static NAT",
|
||||
"issystem": "Is System",
|
||||
"isvolatile": "Volatile",
|
||||
"keep": "Keep",
|
||||
"key": "Key",
|
||||
"keyboardType": "Keyboard type",
|
||||
"keypair": "SSH Key Pair",
|
||||
@ -484,6 +489,8 @@
|
||||
"label.create.VPN.connection": "Create VPN Connection",
|
||||
"label.create.ssh.key.pair": "Create a SSH Key Pair",
|
||||
"label.create.template": "Create template",
|
||||
"label.day.of.month": "Day of Month",
|
||||
"label.day.of.week": "Day of Week",
|
||||
"label.decline.invitation": "Decline invitation",
|
||||
"label.dedicate.cluster": "Dedicate Cluster",
|
||||
"label.dedicate.host": "Dedicate Host",
|
||||
@ -534,6 +541,7 @@
|
||||
"label.enable.vpc.offering": "Enable VPC offering",
|
||||
"label.enable.vpn": "Enable Remote Access VPN",
|
||||
"label.enter.token": "Enter token",
|
||||
"label.error.volume.upload": "Please choose a file",
|
||||
"label.error.zone.combined": "All Zones cannot be combined with any other zone",
|
||||
"label.french.azerty.keyboard": "French AZERTY keyboard",
|
||||
"label.globo.dns.configuration": "GloboDNS Configuration",
|
||||
@ -543,11 +551,18 @@
|
||||
"label.ha.configure": "Configure HA",
|
||||
"label.ha.disable": "Disable HA",
|
||||
"label.ha.enable": "Enable HA",
|
||||
"label.scheduled.snapshots": "Scheduled Snapshots",
|
||||
"label.header.volume.snapshot": "You can set up recurring snapshot schedules by selecting from the available options below and applying your policy preference",
|
||||
"label.header.volume.take.snapshot": "Please confirm that you want to take a snapshot of this volume.",
|
||||
"label.instanciate.template.associate.profile.blade": "Instanciate Template and Associate Profile to Blade",
|
||||
"label.interval.weekly": "Every {number}",
|
||||
"label.interval.monthly": "Day {number} of month",
|
||||
"label.japanese.keyboard": "Japanese keyboard",
|
||||
"label.link.domain.to.ldap": "Link Domain to LDAP",
|
||||
"label.make.project.owner": "Make account project owner",
|
||||
"label.metrics": "Metrics",
|
||||
"label.min.past.hour": "min past the hr",
|
||||
"label.minute.past.hour": "minute(s) past the hour",
|
||||
"label.migrate.instance.to.host": "Migrate instance to another host",
|
||||
"label.migrate.instance.to.ps": "Migrate instance to another primary storage",
|
||||
"label.migrate.lb.vm": "Migrate LB VM",
|
||||
@ -555,6 +570,7 @@
|
||||
"label.migrate.volume.to.primary.storage": "Migrate volume to another primary storage",
|
||||
"label.ncc.delete": "Delete NCC",
|
||||
"label.network.addVM": "Add network to VM",
|
||||
"label.new.tag": "New Tag",
|
||||
"label.new.project": "New Project",
|
||||
"label.outofbandmanagement.action.issue": "Issue Out-of-band Management Power Action",
|
||||
"label.outofbandmanagement.changepassword": "Change Out-of-band Management Password",
|
||||
@ -816,6 +832,8 @@
|
||||
"routerType": "Type",
|
||||
"samlEnable": "Authorize SAML SSO",
|
||||
"samlEntity": "Identity Provider",
|
||||
"saturday": "Saturday",
|
||||
"schedule": "Schedule",
|
||||
"scope": "Scope",
|
||||
"secondaryStorageLimit": "Secondary Storage limits (GiB)",
|
||||
"secondaryips": "Secondary IPs",
|
||||
@ -879,6 +897,7 @@
|
||||
"storagetype": "Storage Type",
|
||||
"subdomainaccess": "Subdomain Access",
|
||||
"submit": "Submit",
|
||||
"sunday": "Sunday",
|
||||
"supportedServices": "Supported Services",
|
||||
"supportspublicaccess": "Supports Public Access",
|
||||
"supportsregionLevelvpc": "Supports Region Level VPC",
|
||||
@ -899,6 +918,7 @@
|
||||
"tftpdir": "Tftp root directory",
|
||||
"threshold": "Threshold",
|
||||
"tierName": "Tier",
|
||||
"time": "Time",
|
||||
"timeout": "Timeout",
|
||||
"timezone": "Timezone",
|
||||
"token": "Token",
|
||||
@ -956,6 +976,7 @@
|
||||
"vmwaredcVcenter": "VMware datacenter vcenter",
|
||||
"vmwarenetworklabel": "VMware traffic label",
|
||||
"volume": "Volume",
|
||||
"volumeChecksum": "MD5 checksum",
|
||||
"volumeFileUpload": "Local file",
|
||||
"volumeLimit": "Volume Limits",
|
||||
"volumeTotal": "Volumes",
|
||||
@ -964,6 +985,7 @@
|
||||
"volumename": "Volume Name",
|
||||
"volumes": "Volumes to be deleted",
|
||||
"volumetotal": "Volume",
|
||||
"volume.volumeFileUpload.description": "Click or drag file to this area to upload",
|
||||
"vpcLimit": "VPC limits",
|
||||
"vpcid": "VPC",
|
||||
"vpcname": "VPC",
|
||||
@ -998,5 +1020,6 @@
|
||||
"yourInstance": "Your instance",
|
||||
"newInstance": "New instance",
|
||||
"cpu": "CPU",
|
||||
"ram": "RAM"
|
||||
"ram": "RAM",
|
||||
"wednesday": "Wednesday"
|
||||
}
|
||||
|
||||
80
ui/src/utils/timezone/index.js
Normal file
80
ui/src/utils/timezone/index.js
Normal file
@ -0,0 +1,80 @@
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
function loadTimeZone () {
|
||||
const timeZoneJson = require.context('./', true, /[A-Za-z0-9-_,\s]+\.json$/i)
|
||||
const data = []
|
||||
|
||||
timeZoneJson.keys().forEach(key => {
|
||||
const matched = key.match(/([A-Za-z0-9-_]+)\./i)
|
||||
if (matched && matched.length > 1) {
|
||||
const json = timeZoneJson(key)
|
||||
for (const index in json) {
|
||||
data.push({
|
||||
id: index,
|
||||
name: json[index]
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
function getFullTimeZone (strQuery) {
|
||||
if (!strQuery || strQuery === '') {
|
||||
return []
|
||||
}
|
||||
|
||||
const timeZoneJson = require.context('./', true, /[A-Za-z0-9-_,\s]+\.json$/i)
|
||||
const data = []
|
||||
timeZoneJson.keys().forEach(key => {
|
||||
const matched = key.match(/([A-Za-z0-9-_]+)\./i)
|
||||
if (matched && matched.length > 1) {
|
||||
const json = timeZoneJson(key)
|
||||
for (const index in json) {
|
||||
if (index.toLowerCase() === strQuery.toLowerCase()) {
|
||||
data.push({
|
||||
id: index,
|
||||
name: json[index]
|
||||
})
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
export function timeZone () {
|
||||
return new Promise(resolve => {
|
||||
const dataTimeZone = loadTimeZone()
|
||||
resolve(dataTimeZone)
|
||||
})
|
||||
}
|
||||
|
||||
export function timeZoneName (key) {
|
||||
const dataTimeZone = getFullTimeZone(key)
|
||||
|
||||
if (dataTimeZone && dataTimeZone[0]) {
|
||||
return dataTimeZone[0].name
|
||||
}
|
||||
|
||||
return ''
|
||||
}
|
||||
620
ui/src/utils/timezone/timezone.json
Normal file
620
ui/src/utils/timezone/timezone.json
Normal file
@ -0,0 +1,620 @@
|
||||
{
|
||||
"ACT": "ACT [Central Standard Time (Northern Territory)]",
|
||||
"AET": "AET [Eastern Standard Time (New South Wales)]",
|
||||
"AGT": "AGT [Argentine Time]",
|
||||
"ART": "ART [Eastern European Time]",
|
||||
"AST": "AST [Alaska Standard Time]",
|
||||
"Africa/Abidjan": "Africa/Abidjan [Greenwich Mean Time]",
|
||||
"Africa/Accra": "Africa/Accra [Ghana Mean Time]",
|
||||
"Africa/Addis_Ababa": "Africa/Addis_Ababa [Eastern African Time]",
|
||||
"Africa/Algiers": "Africa/Algiers [Central European Time]",
|
||||
"Africa/Asmara": "Africa/Asmara [Eastern African Time]",
|
||||
"Africa/Asmera": "Africa/Asmera [Eastern African Time]",
|
||||
"Africa/Bamako": "Africa/Bamako [Greenwich Mean Time]",
|
||||
"Africa/Bangui": "Africa/Bangui [Western African Time]",
|
||||
"Africa/Banjul": "Africa/Banjul [Greenwich Mean Time]",
|
||||
"Africa/Bissau": "Africa/Bissau [Greenwich Mean Time]",
|
||||
"Africa/Blantyre": "Africa/Blantyre [Central African Time]",
|
||||
"Africa/Brazzaville": "Africa/Brazzaville [Western African Time]",
|
||||
"Africa/Bujumbura": "Africa/Bujumbura [Central African Time]",
|
||||
"Africa/Cairo": "Africa/Cairo [Eastern European Time]",
|
||||
"Africa/Casablanca": "Africa/Casablanca [Western European Time]",
|
||||
"Africa/Ceuta": "Africa/Ceuta [Central European Time]",
|
||||
"Africa/Conakry": "Africa/Conakry [Greenwich Mean Time]",
|
||||
"Africa/Dakar": "Africa/Dakar [Greenwich Mean Time]",
|
||||
"Africa/Dar_es_Salaam": "Africa/Dar_es_Salaam [Eastern African Time]",
|
||||
"Africa/Djibouti": "Africa/Djibouti [Eastern African Time]",
|
||||
"Africa/Douala": "Africa/Douala [Western African Time]",
|
||||
"Africa/El_Aaiun": "Africa/El_Aaiun [Western European Time]",
|
||||
"Africa/Freetown": "Africa/Freetown [Greenwich Mean Time]",
|
||||
"Africa/Gaborone": "Africa/Gaborone [Central African Time]",
|
||||
"Africa/Harare": "Africa/Harare [Central African Time]",
|
||||
"Africa/Johannesburg": "Africa/Johannesburg [South Africa Standard Time]",
|
||||
"Africa/Juba": "Africa/Juba [GMT+03:00]",
|
||||
"Africa/Kampala": "Africa/Kampala [Eastern African Time]",
|
||||
"Africa/Khartoum": "Africa/Khartoum [Eastern African Time]",
|
||||
"Africa/Kigali": "Africa/Kigali [Central African Time]",
|
||||
"Africa/Kinshasa": "Africa/Kinshasa [Western African Time]",
|
||||
"Africa/Lagos": "Africa/Lagos [Western African Time]",
|
||||
"Africa/Libreville": "Africa/Libreville [Western African Time]",
|
||||
"Africa/Lome": "Africa/Lome [Greenwich Mean Time]",
|
||||
"Africa/Luanda": "Africa/Luanda [Western African Time]",
|
||||
"Africa/Lubumbashi": "Africa/Lubumbashi [Central African Time]",
|
||||
"Africa/Lusaka": "Africa/Lusaka [Central African Time]",
|
||||
"Africa/Malabo": "Africa/Malabo [Western African Time]",
|
||||
"Africa/Maputo": "Africa/Maputo [Central African Time]",
|
||||
"Africa/Maseru": "Africa/Maseru [South Africa Standard Time]",
|
||||
"Africa/Mbabane": "Africa/Mbabane [South Africa Standard Time]",
|
||||
"Africa/Mogadishu": "Africa/Mogadishu [Eastern African Time]",
|
||||
"Africa/Monrovia": "Africa/Monrovia [Greenwich Mean Time]",
|
||||
"Africa/Nairobi": "Africa/Nairobi [Eastern African Time]",
|
||||
"Africa/Ndjamena": "Africa/Ndjamena [Western African Time]",
|
||||
"Africa/Niamey": "Africa/Niamey [Western African Time]",
|
||||
"Africa/Nouakchott": "Africa/Nouakchott [Greenwich Mean Time]",
|
||||
"Africa/Ouagadougou": "Africa/Ouagadougou [Greenwich Mean Time]",
|
||||
"Africa/Porto-Novo": "Africa/Porto-Novo [Western African Time]",
|
||||
"Africa/Sao_Tome": "Africa/Sao_Tome [Greenwich Mean Time]",
|
||||
"Africa/Timbuktu": "Africa/Timbuktu [Greenwich Mean Time]",
|
||||
"Africa/Tripoli": "Africa/Tripoli [Eastern European Time]",
|
||||
"Africa/Tunis": "Africa/Tunis [Central European Time]",
|
||||
"Africa/Windhoek": "Africa/Windhoek [Western African Time]",
|
||||
"America/Adak": "America/Adak [Hawaii-Aleutian Standard Time]",
|
||||
"America/Anchorage": "America/Anchorage [Alaska Standard Time]",
|
||||
"America/Anguilla": "America/Anguilla [Atlantic Standard Time]",
|
||||
"America/Antigua": "America/Antigua [Atlantic Standard Time]",
|
||||
"America/Araguaina": "America/Araguaina [Brasilia Time]",
|
||||
"America/Argentina/Buenos_Aires": "America/Argentina/Buenos_Aires [Argentine Time]",
|
||||
"America/Argentina/Catamarca": "America/Argentina/Catamarca [Argentine Time]",
|
||||
"America/Argentina/ComodRivadavia": "America/Argentina/ComodRivadavia [Argentine Time]",
|
||||
"America/Argentina/Cordoba": "America/Argentina/Cordoba [Argentine Time]",
|
||||
"America/Argentina/Jujuy": "America/Argentina/Jujuy [Argentine Time]",
|
||||
"America/Argentina/La_Rioja": "America/Argentina/La_Rioja [Argentine Time]",
|
||||
"America/Argentina/Mendoza": "America/Argentina/Mendoza [Argentine Time]",
|
||||
"America/Argentina/Rio_Gallegos": "America/Argentina/Rio_Gallegos [Argentine Time]",
|
||||
"America/Argentina/Salta": "America/Argentina/Salta [Argentine Time]",
|
||||
"America/Argentina/San_Juan": "America/Argentina/San_Juan [Argentine Time]",
|
||||
"America/Argentina/San_Luis": "America/Argentina/San_Luis [Western Argentine Time]",
|
||||
"America/Argentina/Tucuman": "America/Argentina/Tucuman [Argentine Time]",
|
||||
"America/Argentina/Ushuaia": "America/Argentina/Ushuaia [Argentine Time]",
|
||||
"America/Aruba": "America/Aruba [Atlantic Standard Time]",
|
||||
"America/Asuncion": "America/Asuncion [Paraguay Time]",
|
||||
"America/Atikokan": "America/Atikokan [Eastern Standard Time]",
|
||||
"America/Atka": "America/Atka [Hawaii-Aleutian Standard Time]",
|
||||
"America/Bahia": "America/Bahia [Brasilia Time]",
|
||||
"America/Bahia_Banderas": "America/Bahia_Banderas [GMT-06:00]",
|
||||
"America/Barbados": "America/Barbados [Atlantic Standard Time]",
|
||||
"America/Belem": "America/Belem [Brasilia Time]",
|
||||
"America/Belize": "America/Belize [Central Standard Time]",
|
||||
"America/Blanc-Sablon": "America/Blanc-Sablon [Atlantic Standard Time]",
|
||||
"America/Boa_Vista": "America/Boa_Vista [Amazon Time]",
|
||||
"America/Bogota": "America/Bogota [Colombia Time]",
|
||||
"America/Boise": "America/Boise [Mountain Standard Time]",
|
||||
"America/Buenos_Aires": "America/Buenos_Aires [Argentine Time]",
|
||||
"America/Cambridge_Bay": "America/Cambridge_Bay [Mountain Standard Time]",
|
||||
"America/Campo_Grande": "America/Campo_Grande [Amazon Time]",
|
||||
"America/Cancun": "America/Cancun [Central Standard Time]",
|
||||
"America/Caracas": "America/Caracas [Venezuela Time]",
|
||||
"America/Catamarca": "America/Catamarca [Argentine Time]",
|
||||
"America/Cayenne": "America/Cayenne [French Guiana Time]",
|
||||
"America/Cayman": "America/Cayman [Eastern Standard Time]",
|
||||
"America/Chicago": "America/Chicago [Central Standard Time]",
|
||||
"America/Chihuahua": "America/Chihuahua [Mountain Standard Time]",
|
||||
"America/Coral_Harbour": "America/Coral_Harbour [Eastern Standard Time]",
|
||||
"America/Cordoba": "America/Cordoba [Argentine Time]",
|
||||
"America/Costa_Rica": "America/Costa_Rica [Central Standard Time]",
|
||||
"America/Creston": "America/Creston [GMT-07:00]",
|
||||
"America/Cuiaba": "America/Cuiaba [Amazon Time]",
|
||||
"America/Curacao": "America/Curacao [Atlantic Standard Time]",
|
||||
"America/Danmarkshavn": "America/Danmarkshavn [Greenwich Mean Time]",
|
||||
"America/Dawson": "America/Dawson [Pacific Standard Time]",
|
||||
"America/Dawson_Creek": "America/Dawson_Creek [Mountain Standard Time]",
|
||||
"America/Denver": "America/Denver [Mountain Standard Time]",
|
||||
"America/Detroit": "America/Detroit [Eastern Standard Time]",
|
||||
"America/Dominica": "America/Dominica [Atlantic Standard Time]",
|
||||
"America/Edmonton": "America/Edmonton [Mountain Standard Time]",
|
||||
"America/Eirunepe": "America/Eirunepe [Amazon Time]",
|
||||
"America/El_Salvador": "America/El_Salvador [Central Standard Time]",
|
||||
"America/Ensenada": "America/Ensenada [Pacific Standard Time]",
|
||||
"America/Fort_Wayne": "America/Fort_Wayne [Eastern Standard Time]",
|
||||
"America/Fortaleza": "America/Fortaleza [Brasilia Time]",
|
||||
"America/Glace_Bay": "America/Glace_Bay [Atlantic Standard Time]",
|
||||
"America/Godthab": "America/Godthab [Western Greenland Time]",
|
||||
"America/Goose_Bay": "America/Goose_Bay [Atlantic Standard Time]",
|
||||
"America/Grand_Turk": "America/Grand_Turk [Eastern Standard Time]",
|
||||
"America/Grenada": "America/Grenada [Atlantic Standard Time]",
|
||||
"America/Guadeloupe": "America/Guadeloupe [Atlantic Standard Time]",
|
||||
"America/Guatemala": "America/Guatemala [Central Standard Time]",
|
||||
"America/Guayaquil": "America/Guayaquil [Ecuador Time]",
|
||||
"America/Guyana": "America/Guyana [Guyana Time]",
|
||||
"America/Halifax": "America/Halifax [Atlantic Standard Time]",
|
||||
"America/Havana": "America/Havana [Cuba Standard Time]",
|
||||
"America/Hermosillo": "America/Hermosillo [Mountain Standard Time]",
|
||||
"America/Indiana/Indianapolis": "America/Indiana/Indianapolis [Eastern Standard Time]",
|
||||
"America/Indiana/Knox": "America/Indiana/Knox [Central Standard Time]",
|
||||
"America/Indiana/Marengo": "America/Indiana/Marengo [Eastern Standard Time]",
|
||||
"America/Indiana/Petersburg": "America/Indiana/Petersburg [Eastern Standard Time]",
|
||||
"America/Indiana/Tell_City": "America/Indiana/Tell_City [Central Standard Time]",
|
||||
"America/Indiana/Vevay": "America/Indiana/Vevay [Eastern Standard Time]",
|
||||
"America/Indiana/Vincennes": "America/Indiana/Vincennes [Eastern Standard Time]",
|
||||
"America/Indiana/Winamac": "America/Indiana/Winamac [Eastern Standard Time]",
|
||||
"America/Indianapolis": "America/Indianapolis [Eastern Standard Time]",
|
||||
"America/Inuvik": "America/Inuvik [Mountain Standard Time]",
|
||||
"America/Iqaluit": "America/Iqaluit [Eastern Standard Time]",
|
||||
"America/Jamaica": "America/Jamaica [Eastern Standard Time]",
|
||||
"America/Jujuy": "America/Jujuy [Argentine Time]",
|
||||
"America/Juneau": "America/Juneau [Alaska Standard Time]",
|
||||
"America/Kentucky/Louisville": "America/Kentucky/Louisville [Eastern Standard Time]",
|
||||
"America/Kentucky/Monticello": "America/Kentucky/Monticello [Eastern Standard Time]",
|
||||
"America/Knox_IN": "America/Knox_IN [Central Standard Time]",
|
||||
"America/Kralendijk": "America/Kralendijk [GMT-04:00]",
|
||||
"America/La_Paz": "America/La_Paz [Bolivia Time]",
|
||||
"America/Lima": "America/Lima [Peru Time]",
|
||||
"America/Los_Angeles": "America/Los_Angeles [Pacific Standard Time]",
|
||||
"America/Louisville": "America/Louisville [Eastern Standard Time]",
|
||||
"America/Lower_Princes": "America/Lower_Princes [GMT-04:00]",
|
||||
"America/Maceio": "America/Maceio [Brasilia Time]",
|
||||
"America/Managua": "America/Managua [Central Standard Time]",
|
||||
"America/Manaus": "America/Manaus [Amazon Time]",
|
||||
"America/Marigot": "America/Marigot [Atlantic Standard Time]",
|
||||
"America/Martinique": "America/Martinique [Atlantic Standard Time]",
|
||||
"America/Matamoros": "America/Matamoros [Central Standard Time]",
|
||||
"America/Mazatlan": "America/Mazatlan [Mountain Standard Time]",
|
||||
"America/Mendoza": "America/Mendoza [Argentine Time]",
|
||||
"America/Menominee": "America/Menominee [Central Standard Time]",
|
||||
"America/Merida": "America/Merida [Central Standard Time]",
|
||||
"America/Metlakatla": "America/Metlakatla [GMT-08:00]",
|
||||
"America/Mexico_City": "America/Mexico_City [Central Standard Time]",
|
||||
"America/Miquelon": "America/Miquelon [Pierre & Miquelon Standard Time]",
|
||||
"America/Moncton": "America/Moncton [Atlantic Standard Time]",
|
||||
"America/Monterrey": "America/Monterrey [Central Standard Time]",
|
||||
"America/Montevideo": "America/Montevideo [Uruguay Time]",
|
||||
"America/Montreal": "America/Montreal [Eastern Standard Time]",
|
||||
"America/Montserrat": "America/Montserrat [Atlantic Standard Time]",
|
||||
"America/Nassau": "America/Nassau [Eastern Standard Time]",
|
||||
"America/New_York": "America/New_York [Eastern Standard Time]",
|
||||
"America/Nipigon": "America/Nipigon [Eastern Standard Time]",
|
||||
"America/Nome": "America/Nome [Alaska Standard Time]",
|
||||
"America/Noronha": "America/Noronha [Fernando de Noronha Time]",
|
||||
"America/North_Dakota/Beulah": "America/North_Dakota/Beulah [GMT-06:00]",
|
||||
"America/North_Dakota/Center": "America/North_Dakota/Center [Central Standard Time]",
|
||||
"America/North_Dakota/New_Salem": "America/North_Dakota/New_Salem [Central Standard Time]",
|
||||
"America/Ojinaga": "America/Ojinaga [Mountain Standard Time]",
|
||||
"America/Panama": "America/Panama [Eastern Standard Time]",
|
||||
"America/Pangnirtung": "America/Pangnirtung [Eastern Standard Time]",
|
||||
"America/Paramaribo": "America/Paramaribo [Suriname Time]",
|
||||
"America/Phoenix": "America/Phoenix [Mountain Standard Time]",
|
||||
"America/Port-au-Prince": "America/Port-au-Prince [Eastern Standard Time]",
|
||||
"America/Port_of_Spain": "America/Port_of_Spain [Atlantic Standard Time]",
|
||||
"America/Porto_Acre": "America/Porto_Acre [Amazon Time]",
|
||||
"America/Porto_Velho": "America/Porto_Velho [Amazon Time]",
|
||||
"America/Puerto_Rico": "America/Puerto_Rico [Atlantic Standard Time]",
|
||||
"America/Rainy_River": "America/Rainy_River [Central Standard Time]",
|
||||
"America/Rankin_Inlet": "America/Rankin_Inlet [Central Standard Time]",
|
||||
"America/Recife": "America/Recife [Brasilia Time]",
|
||||
"America/Regina": "America/Regina [Central Standard Time]",
|
||||
"America/Resolute": "America/Resolute [Eastern Standard Time]",
|
||||
"America/Rio_Branco": "America/Rio_Branco [Amazon Time]",
|
||||
"America/Rosario": "America/Rosario [Argentine Time]",
|
||||
"America/Santa_Isabel": "America/Santa_Isabel [Pacific Standard Time]",
|
||||
"America/Santarem": "America/Santarem [Brasilia Time]",
|
||||
"America/Santiago": "America/Santiago [Chile Time]",
|
||||
"America/Santo_Domingo": "America/Santo_Domingo [Atlantic Standard Time]",
|
||||
"America/Sao_Paulo": "America/Sao_Paulo [Brasilia Time]",
|
||||
"America/Scoresbysund": "America/Scoresbysund [Eastern Greenland Time]",
|
||||
"America/Shiprock": "America/Shiprock [Mountain Standard Time]",
|
||||
"America/Sitka": "America/Sitka [GMT-09:00]",
|
||||
"America/St_Barthelemy": "America/St_Barthelemy [Atlantic Standard Time]",
|
||||
"America/St_Johns": "America/St_Johns [Newfoundland Standard Time]",
|
||||
"America/St_Kitts": "America/St_Kitts [Atlantic Standard Time]",
|
||||
"America/St_Lucia": "America/St_Lucia [Atlantic Standard Time]",
|
||||
"America/St_Thomas": "America/St_Thomas [Atlantic Standard Time]",
|
||||
"America/St_Vincent": "America/St_Vincent [Atlantic Standard Time]",
|
||||
"America/Swift_Current": "America/Swift_Current [Central Standard Time]",
|
||||
"America/Tegucigalpa": "America/Tegucigalpa [Central Standard Time]",
|
||||
"America/Thule": "America/Thule [Atlantic Standard Time]",
|
||||
"America/Thunder_Bay": "America/Thunder_Bay [Eastern Standard Time]",
|
||||
"America/Tijuana": "America/Tijuana [Pacific Standard Time]",
|
||||
"America/Toronto": "America/Toronto [Eastern Standard Time]",
|
||||
"America/Tortola": "America/Tortola [Atlantic Standard Time]",
|
||||
"America/Vancouver": "America/Vancouver [Pacific Standard Time]",
|
||||
"America/Virgin": "America/Virgin [Atlantic Standard Time]",
|
||||
"America/Whitehorse": "America/Whitehorse [Pacific Standard Time]",
|
||||
"America/Winnipeg": "America/Winnipeg [Central Standard Time]",
|
||||
"America/Yakutat": "America/Yakutat [Alaska Standard Time]",
|
||||
"America/Yellowknife": "America/Yellowknife [Mountain Standard Time]",
|
||||
"Antarctica/Casey": "Antarctica/Casey [Western Standard Time (Australia)]",
|
||||
"Antarctica/Davis": "Antarctica/Davis [Davis Time]",
|
||||
"Antarctica/DumontDUrville": "Antarctica/DumontDUrville [Dumont-d'Urville Time]",
|
||||
"Antarctica/Macquarie": "Antarctica/Macquarie [Macquarie Island Time]",
|
||||
"Antarctica/Mawson": "Antarctica/Mawson [Mawson Time]",
|
||||
"Antarctica/McMurdo": "Antarctica/McMurdo [New Zealand Standard Time]",
|
||||
"Antarctica/Palmer": "Antarctica/Palmer [Chile Time]",
|
||||
"Antarctica/Rothera": "Antarctica/Rothera [Rothera Time]",
|
||||
"Antarctica/South_Pole": "Antarctica/South_Pole [New Zealand Standard Time]",
|
||||
"Antarctica/Syowa": "Antarctica/Syowa [Syowa Time]",
|
||||
"Antarctica/Vostok": "Antarctica/Vostok [Vostok Time]",
|
||||
"Arctic/Longyearbyen": "Arctic/Longyearbyen [Central European Time]",
|
||||
"Asia/Aden": "Asia/Aden [Arabia Standard Time]",
|
||||
"Asia/Almaty": "Asia/Almaty [Alma-Ata Time]",
|
||||
"Asia/Amman": "Asia/Amman [Eastern European Time]",
|
||||
"Asia/Anadyr": "Asia/Anadyr [Anadyr Time]",
|
||||
"Asia/Aqtau": "Asia/Aqtau [Aqtau Time]",
|
||||
"Asia/Aqtobe": "Asia/Aqtobe [Aqtobe Time]",
|
||||
"Asia/Ashgabat": "Asia/Ashgabat [Turkmenistan Time]",
|
||||
"Asia/Ashkhabad": "Asia/Ashkhabad [Turkmenistan Time]",
|
||||
"Asia/Baghdad": "Asia/Baghdad [Arabia Standard Time]",
|
||||
"Asia/Bahrain": "Asia/Bahrain [Arabia Standard Time]",
|
||||
"Asia/Baku": "Asia/Baku [Azerbaijan Time]",
|
||||
"Asia/Bangkok": "Asia/Bangkok [Indochina Time]",
|
||||
"Asia/Beirut": "Asia/Beirut [Eastern European Time]",
|
||||
"Asia/Bishkek": "Asia/Bishkek [Kirgizstan Time]",
|
||||
"Asia/Brunei": "Asia/Brunei [Brunei Time]",
|
||||
"Asia/Calcutta": "Asia/Calcutta [India Standard Time]",
|
||||
"Asia/Choibalsan": "Asia/Choibalsan [Choibalsan Time]",
|
||||
"Asia/Chongqing": "Asia/Chongqing [China Standard Time]",
|
||||
"Asia/Chungking": "Asia/Chungking [China Standard Time]",
|
||||
"Asia/Colombo": "Asia/Colombo [India Standard Time]",
|
||||
"Asia/Dacca": "Asia/Dacca [Bangladesh Time]",
|
||||
"Asia/Damascus": "Asia/Damascus [Eastern European Time]",
|
||||
"Asia/Dhaka": "Asia/Dhaka [Bangladesh Time]",
|
||||
"Asia/Dili": "Asia/Dili [Timor-Leste Time]",
|
||||
"Asia/Dubai": "Asia/Dubai [Gulf Standard Time]",
|
||||
"Asia/Dushanbe": "Asia/Dushanbe [Tajikistan Time]",
|
||||
"Asia/Gaza": "Asia/Gaza [Eastern European Time]",
|
||||
"Asia/Harbin": "Asia/Harbin [China Standard Time]",
|
||||
"Asia/Hebron": "Asia/Hebron [GMT+02:00]",
|
||||
"Asia/Ho_Chi_Minh": "Asia/Ho_Chi_Minh [Indochina Time]",
|
||||
"Asia/Hong_Kong": "Asia/Hong_Kong [Hong Kong Time]",
|
||||
"Asia/Hovd": "Asia/Hovd [Hovd Time]",
|
||||
"Asia/Irkutsk": "Asia/Irkutsk [Irkutsk Time]",
|
||||
"Asia/Istanbul": "Asia/Istanbul [Eastern European Time]",
|
||||
"Asia/Jakarta": "Asia/Jakarta [West Indonesia Time]",
|
||||
"Asia/Jayapura": "Asia/Jayapura [East Indonesia Time]",
|
||||
"Asia/Jerusalem": "Asia/Jerusalem [Israel Standard Time]",
|
||||
"Asia/Kabul": "Asia/Kabul [Afghanistan Time]",
|
||||
"Asia/Kamchatka": "Asia/Kamchatka [Petropavlovsk-Kamchatski Time]",
|
||||
"Asia/Karachi": "Asia/Karachi [Pakistan Time]",
|
||||
"Asia/Kashgar": "Asia/Kashgar [China Standard Time]",
|
||||
"Asia/Kathmandu": "Asia/Kathmandu [Nepal Time]",
|
||||
"Asia/Katmandu": "Asia/Katmandu [Nepal Time]",
|
||||
"Asia/Khandyga": "Asia/Khandyga [GMT+10:00]",
|
||||
"Asia/Kolkata": "Asia/Kolkata [India Standard Time]",
|
||||
"Asia/Krasnoyarsk": "Asia/Krasnoyarsk [Krasnoyarsk Time]",
|
||||
"Asia/Kuala_Lumpur": "Asia/Kuala_Lumpur [Malaysia Time]",
|
||||
"Asia/Kuching": "Asia/Kuching [Malaysia Time]",
|
||||
"Asia/Kuwait": "Asia/Kuwait [Arabia Standard Time]",
|
||||
"Asia/Macao": "Asia/Macao [China Standard Time]",
|
||||
"Asia/Macau": "Asia/Macau [China Standard Time]",
|
||||
"Asia/Magadan": "Asia/Magadan [Magadan Time]",
|
||||
"Asia/Makassar": "Asia/Makassar [Central Indonesia Time]",
|
||||
"Asia/Manila": "Asia/Manila [Philippines Time]",
|
||||
"Asia/Muscat": "Asia/Muscat [Gulf Standard Time]",
|
||||
"Asia/Nicosia": "Asia/Nicosia [Eastern European Time]",
|
||||
"Asia/Novokuznetsk": "Asia/Novokuznetsk [Novosibirsk Time]",
|
||||
"Asia/Novosibirsk": "Asia/Novosibirsk [Novosibirsk Time]",
|
||||
"Asia/Omsk": "Asia/Omsk [Omsk Time]",
|
||||
"Asia/Oral": "Asia/Oral [Oral Time]",
|
||||
"Asia/Phnom_Penh": "Asia/Phnom_Penh [Indochina Time]",
|
||||
"Asia/Pontianak": "Asia/Pontianak [West Indonesia Time]",
|
||||
"Asia/Pyongyang": "Asia/Pyongyang [Korea Standard Time]",
|
||||
"Asia/Qatar": "Asia/Qatar [Arabia Standard Time]",
|
||||
"Asia/Qyzylorda": "Asia/Qyzylorda [Qyzylorda Time]",
|
||||
"Asia/Rangoon": "Asia/Rangoon [Myanmar Time]",
|
||||
"Asia/Riyadh": "Asia/Riyadh [Arabia Standard Time]",
|
||||
"Asia/Riyadh87": "Asia/Riyadh87 [GMT+03:07]",
|
||||
"Asia/Riyadh88": "Asia/Riyadh88 [GMT+03:07]",
|
||||
"Asia/Riyadh89": "Asia/Riyadh89 [GMT+03:07]",
|
||||
"Asia/Saigon": "Asia/Saigon [Indochina Time]",
|
||||
"Asia/Sakhalin": "Asia/Sakhalin [Sakhalin Time]",
|
||||
"Asia/Samarkand": "Asia/Samarkand [Uzbekistan Time]",
|
||||
"Asia/Seoul": "Asia/Seoul [Korea Standard Time]",
|
||||
"Asia/Shanghai": "Asia/Shanghai [China Standard Time]",
|
||||
"Asia/Singapore": "Asia/Singapore [Singapore Time]",
|
||||
"Asia/Taipei": "Asia/Taipei [China Standard Time]",
|
||||
"Asia/Tashkent": "Asia/Tashkent [Uzbekistan Time]",
|
||||
"Asia/Tbilisi": "Asia/Tbilisi [Georgia Time]",
|
||||
"Asia/Tehran": "Asia/Tehran [Iran Standard Time]",
|
||||
"Asia/Tel_Aviv": "Asia/Tel_Aviv [Israel Standard Time]",
|
||||
"Asia/Thimbu": "Asia/Thimbu [Bhutan Time]",
|
||||
"Asia/Thimphu": "Asia/Thimphu [Bhutan Time]",
|
||||
"Asia/Tokyo": "Asia/Tokyo [Japan Standard Time]",
|
||||
"Asia/Ujung_Pandang": "Asia/Ujung_Pandang [Central Indonesia Time]",
|
||||
"Asia/Ulaanbaatar": "Asia/Ulaanbaatar [Ulaanbaatar Time]",
|
||||
"Asia/Ulan_Bator": "Asia/Ulan_Bator [Ulaanbaatar Time]",
|
||||
"Asia/Urumqi": "Asia/Urumqi [China Standard Time]",
|
||||
"Asia/Ust-Nera": "Asia/Ust-Nera [GMT+11:00]",
|
||||
"Asia/Vientiane": "Asia/Vientiane [Indochina Time]",
|
||||
"Asia/Vladivostok": "Asia/Vladivostok [Vladivostok Time]",
|
||||
"Asia/Yakutsk": "Asia/Yakutsk [Yakutsk Time]",
|
||||
"Asia/Yekaterinburg": "Asia/Yekaterinburg [Yekaterinburg Time]",
|
||||
"Asia/Yerevan": "Asia/Yerevan [Armenia Time]",
|
||||
"Atlantic/Azores": "Atlantic/Azores [Azores Time]",
|
||||
"Atlantic/Bermuda": "Atlantic/Bermuda [Atlantic Standard Time]",
|
||||
"Atlantic/Canary": "Atlantic/Canary [Western European Time]",
|
||||
"Atlantic/Cape_Verde": "Atlantic/Cape_Verde [Cape Verde Time]",
|
||||
"Atlantic/Faeroe": "Atlantic/Faeroe [Western European Time]",
|
||||
"Atlantic/Faroe": "Atlantic/Faroe [Western European Time]",
|
||||
"Atlantic/Jan_Mayen": "Atlantic/Jan_Mayen [Central European Time]",
|
||||
"Atlantic/Madeira": "Atlantic/Madeira [Western European Time]",
|
||||
"Atlantic/Reykjavik": "Atlantic/Reykjavik [Greenwich Mean Time]",
|
||||
"Atlantic/South_Georgia": "Atlantic/South_Georgia [South Georgia Standard Time]",
|
||||
"Atlantic/St_Helena": "Atlantic/St_Helena [Greenwich Mean Time]",
|
||||
"Atlantic/Stanley": "Atlantic/Stanley [Falkland Is. Time]",
|
||||
"Australia/ACT": "Australia/ACT [Eastern Standard Time (New South Wales)]",
|
||||
"Australia/Adelaide": "Australia/Adelaide [Central Standard Time (South Australia)]",
|
||||
"Australia/Brisbane": "Australia/Brisbane [Eastern Standard Time (Queensland)]",
|
||||
"Australia/Broken_Hill": "Australia/Broken_Hill [Central Standard Time (South Australia/New South Wales)]",
|
||||
"Australia/Canberra": "Australia/Canberra [Eastern Standard Time (New South Wales)]",
|
||||
"Australia/Currie": "Australia/Currie [Eastern Standard Time (New South Wales)]",
|
||||
"Australia/Darwin": "Australia/Darwin [Central Standard Time (Northern Territory)]",
|
||||
"Australia/Eucla": "Australia/Eucla [Central Western Standard Time (Australia)]",
|
||||
"Australia/Hobart": "Australia/Hobart [Eastern Standard Time (Tasmania)]",
|
||||
"Australia/LHI": "Australia/LHI [Lord Howe Standard Time]",
|
||||
"Australia/Lindeman": "Australia/Lindeman [Eastern Standard Time (Queensland)]",
|
||||
"Australia/Lord_Howe": "Australia/Lord_Howe [Lord Howe Standard Time]",
|
||||
"Australia/Melbourne": "Australia/Melbourne [Eastern Standard Time (Victoria)]",
|
||||
"Australia/NSW": "Australia/NSW [Eastern Standard Time (New South Wales)]",
|
||||
"Australia/North": "Australia/North [Central Standard Time (Northern Territory)]",
|
||||
"Australia/Perth": "Australia/Perth [Western Standard Time (Australia)]",
|
||||
"Australia/Queensland": "Australia/Queensland [Eastern Standard Time (Queensland)]",
|
||||
"Australia/South": "Australia/South [Central Standard Time (South Australia)]",
|
||||
"Australia/Sydney": "Australia/Sydney [Eastern Standard Time (New South Wales)]",
|
||||
"Australia/Tasmania": "Australia/Tasmania [Eastern Standard Time (Tasmania)]",
|
||||
"Australia/Victoria": "Australia/Victoria [Eastern Standard Time (Victoria)]",
|
||||
"Australia/West": "Australia/West [Western Standard Time (Australia)]",
|
||||
"Australia/Yancowinna": "Australia/Yancowinna [Central Standard Time (South Australia/New South Wales)]",
|
||||
"BET": "BET [Brasilia Time]",
|
||||
"BST": "BST [Bangladesh Time]",
|
||||
"Brazil/Acre": "Brazil/Acre [Amazon Time]",
|
||||
"Brazil/DeNoronha": "Brazil/DeNoronha [Fernando de Noronha Time]",
|
||||
"Brazil/East": "Brazil/East [Brasilia Time]",
|
||||
"Brazil/West": "Brazil/West [Amazon Time]",
|
||||
"CAT": "CAT [Central African Time]",
|
||||
"CET": "CET [Central European Time]",
|
||||
"CNT": "CNT [Newfoundland Standard Time]",
|
||||
"CST": "CST [Central Standard Time]",
|
||||
"CST6CDT": "CST6CDT [Central Standard Time]",
|
||||
"CTT": "CTT [China Standard Time]",
|
||||
"Canada/Atlantic": "Canada/Atlantic [Atlantic Standard Time]",
|
||||
"Canada/Central": "Canada/Central [Central Standard Time]",
|
||||
"Canada/East-Saskatchewan": "Canada/East-Saskatchewan [Central Standard Time]",
|
||||
"Canada/Eastern": "Canada/Eastern [Eastern Standard Time]",
|
||||
"Canada/Mountain": "Canada/Mountain [Mountain Standard Time]",
|
||||
"Canada/Newfoundland": "Canada/Newfoundland [Newfoundland Standard Time]",
|
||||
"Canada/Pacific": "Canada/Pacific [Pacific Standard Time]",
|
||||
"Canada/Saskatchewan": "Canada/Saskatchewan [Central Standard Time]",
|
||||
"Canada/Yukon": "Canada/Yukon [Pacific Standard Time]",
|
||||
"Chile/Continental": "Chile/Continental [Chile Time]",
|
||||
"Chile/EasterIsland": "Chile/EasterIsland [Easter Is. Time]",
|
||||
"Cuba": "Cuba [Cuba Standard Time]",
|
||||
"EAT": "EAT [Eastern African Time]",
|
||||
"ECT": "ECT [Central European Time]",
|
||||
"EET": "EET [Eastern European Time]",
|
||||
"EST": "EST [Eastern Standard Time]",
|
||||
"EST5EDT": "EST5EDT [Eastern Standard Time]",
|
||||
"Egypt": "Egypt [Eastern European Time]",
|
||||
"Eire": "Eire [Greenwich Mean Time]",
|
||||
"Etc/GMT": "Etc/GMT [GMT+00:00]",
|
||||
"Etc/GMT+0": "Etc/GMT+0 [GMT+00:00]",
|
||||
"Etc/GMT+1": "Etc/GMT+1 [GMT-01:00]",
|
||||
"Etc/GMT+10": "Etc/GMT+10 [GMT-10:00]",
|
||||
"Etc/GMT+11": "Etc/GMT+11 [GMT-11:00]",
|
||||
"Etc/GMT+12": "Etc/GMT+12 [GMT-12:00]",
|
||||
"Etc/GMT+2": "Etc/GMT+2 [GMT-02:00]",
|
||||
"Etc/GMT+3": "Etc/GMT+3 [GMT-03:00]",
|
||||
"Etc/GMT+4": "Etc/GMT+4 [GMT-04:00]",
|
||||
"Etc/GMT+5": "Etc/GMT+5 [GMT-05:00]",
|
||||
"Etc/GMT+6": "Etc/GMT+6 [GMT-06:00]",
|
||||
"Etc/GMT+7": "Etc/GMT+7 [GMT-07:00]",
|
||||
"Etc/GMT+8": "Etc/GMT+8 [GMT-08:00]",
|
||||
"Etc/GMT+9": "Etc/GMT+9 [GMT-09:00]",
|
||||
"Etc/GMT-0": "Etc/GMT-0 [GMT+00:00]",
|
||||
"Etc/GMT-1": "Etc/GMT-1 [GMT+01:00]",
|
||||
"Etc/GMT-10": "Etc/GMT-10 [GMT+10:00]",
|
||||
"Etc/GMT-11": "Etc/GMT-11 [GMT+11:00]",
|
||||
"Etc/GMT-12": "Etc/GMT-12 [GMT+12:00]",
|
||||
"Etc/GMT-13": "Etc/GMT-13 [GMT+13:00]",
|
||||
"Etc/GMT-14": "Etc/GMT-14 [GMT+14:00]",
|
||||
"Etc/GMT-2": "Etc/GMT-2 [GMT+02:00]",
|
||||
"Etc/GMT-3": "Etc/GMT-3 [GMT+03:00]",
|
||||
"Etc/GMT-4": "Etc/GMT-4 [GMT+04:00]",
|
||||
"Etc/GMT-5": "Etc/GMT-5 [GMT+05:00]",
|
||||
"Etc/GMT-6": "Etc/GMT-6 [GMT+06:00]",
|
||||
"Etc/GMT-7": "Etc/GMT-7 [GMT+07:00]",
|
||||
"Etc/GMT-8": "Etc/GMT-8 [GMT+08:00]",
|
||||
"Etc/GMT-9": "Etc/GMT-9 [GMT+09:00]",
|
||||
"Etc/GMT0": "Etc/GMT0 [GMT+00:00]",
|
||||
"Etc/Greenwich": "Etc/Greenwich [Greenwich Mean Time]",
|
||||
"Etc/UCT": "Etc/UCT [Coordinated Universal Time]",
|
||||
"Etc/UTC": "Etc/UTC [Coordinated Universal Time]",
|
||||
"Etc/Universal": "Etc/Universal [Coordinated Universal Time]",
|
||||
"Etc/Zulu": "Etc/Zulu [Coordinated Universal Time]",
|
||||
"Europe/Amsterdam": "Europe/Amsterdam [Central European Time]",
|
||||
"Europe/Andorra": "Europe/Andorra [Central European Time]",
|
||||
"Europe/Athens": "Europe/Athens [Eastern European Time]",
|
||||
"Europe/Belfast": "Europe/Belfast [Greenwich Mean Time]",
|
||||
"Europe/Belgrade": "Europe/Belgrade [Central European Time]",
|
||||
"Europe/Berlin": "Europe/Berlin [Central European Time]",
|
||||
"Europe/Bratislava": "Europe/Bratislava [Central European Time]",
|
||||
"Europe/Brussels": "Europe/Brussels [Central European Time]",
|
||||
"Europe/Bucharest": "Europe/Bucharest [Eastern European Time]",
|
||||
"Europe/Budapest": "Europe/Budapest [Central European Time]",
|
||||
"Europe/Busingen": "Europe/Busingen [GMT+01:00]",
|
||||
"Europe/Chisinau": "Europe/Chisinau [Eastern European Time]",
|
||||
"Europe/Copenhagen": "Europe/Copenhagen [Central European Time]",
|
||||
"Europe/Dublin": "Europe/Dublin [Greenwich Mean Time]",
|
||||
"Europe/Gibraltar": "Europe/Gibraltar [Central European Time]",
|
||||
"Europe/Guernsey": "Europe/Guernsey [Greenwich Mean Time]",
|
||||
"Europe/Helsinki": "Europe/Helsinki [Eastern European Time]",
|
||||
"Europe/Isle_of_Man": "Europe/Isle_of_Man [Greenwich Mean Time]",
|
||||
"Europe/Istanbul": "Europe/Istanbul [Eastern European Time]",
|
||||
"Europe/Jersey": "Europe/Jersey [Greenwich Mean Time]",
|
||||
"Europe/Kaliningrad": "Europe/Kaliningrad [Eastern European Time]",
|
||||
"Europe/Kiev": "Europe/Kiev [Eastern European Time]",
|
||||
"Europe/Lisbon": "Europe/Lisbon [Western European Time]",
|
||||
"Europe/Ljubljana": "Europe/Ljubljana [Central European Time]",
|
||||
"Europe/London": "Europe/London [Greenwich Mean Time]",
|
||||
"Europe/Luxembourg": "Europe/Luxembourg [Central European Time]",
|
||||
"Europe/Madrid": "Europe/Madrid [Central European Time]",
|
||||
"Europe/Malta": "Europe/Malta [Central European Time]",
|
||||
"Europe/Mariehamn": "Europe/Mariehamn [Eastern European Time]",
|
||||
"Europe/Minsk": "Europe/Minsk [Eastern European Time]",
|
||||
"Europe/Monaco": "Europe/Monaco [Central European Time]",
|
||||
"Europe/Moscow": "Europe/Moscow [Moscow Standard Time]",
|
||||
"Europe/Nicosia": "Europe/Nicosia [Eastern European Time]",
|
||||
"Europe/Oslo": "Europe/Oslo [Central European Time]",
|
||||
"Europe/Paris": "Europe/Paris [Central European Time]",
|
||||
"Europe/Podgorica": "Europe/Podgorica [Central European Time]",
|
||||
"Europe/Prague": "Europe/Prague [Central European Time]",
|
||||
"Europe/Riga": "Europe/Riga [Eastern European Time]",
|
||||
"Europe/Rome": "Europe/Rome [Central European Time]",
|
||||
"Europe/Samara": "Europe/Samara [Samara Time]",
|
||||
"Europe/San_Marino": "Europe/San_Marino [Central European Time]",
|
||||
"Europe/Sarajevo": "Europe/Sarajevo [Central European Time]",
|
||||
"Europe/Simferopol": "Europe/Simferopol [Eastern European Time]",
|
||||
"Europe/Skopje": "Europe/Skopje [Central European Time]",
|
||||
"Europe/Sofia": "Europe/Sofia [Eastern European Time]",
|
||||
"Europe/Stockholm": "Europe/Stockholm [Central European Time]",
|
||||
"Europe/Tallinn": "Europe/Tallinn [Eastern European Time]",
|
||||
"Europe/Tirane": "Europe/Tirane [Central European Time]",
|
||||
"Europe/Tiraspol": "Europe/Tiraspol [Eastern European Time]",
|
||||
"Europe/Uzhgorod": "Europe/Uzhgorod [Eastern European Time]",
|
||||
"Europe/Vaduz": "Europe/Vaduz [Central European Time]",
|
||||
"Europe/Vatican": "Europe/Vatican [Central European Time]",
|
||||
"Europe/Vienna": "Europe/Vienna [Central European Time]",
|
||||
"Europe/Vilnius": "Europe/Vilnius [Eastern European Time]",
|
||||
"Europe/Volgograd": "Europe/Volgograd [Volgograd Time]",
|
||||
"Europe/Warsaw": "Europe/Warsaw [Central European Time]",
|
||||
"Europe/Zagreb": "Europe/Zagreb [Central European Time]",
|
||||
"Europe/Zaporozhye": "Europe/Zaporozhye [Eastern European Time]",
|
||||
"Europe/Zurich": "Europe/Zurich [Central European Time]",
|
||||
"GB": "GB [Greenwich Mean Time]",
|
||||
"GB-Eire": "GB-Eire [Greenwich Mean Time]",
|
||||
"GMT": "GMT [Greenwich Mean Time]",
|
||||
"GMT0": "GMT0 [GMT+00:00]",
|
||||
"Greenwich": "Greenwich [Greenwich Mean Time]",
|
||||
"HST": "HST [Hawaii Standard Time]",
|
||||
"Hongkong": "Hongkong [Hong Kong Time]",
|
||||
"IET": "IET [Eastern Standard Time]",
|
||||
"IST": "IST [India Standard Time]",
|
||||
"Iceland": "Iceland [Greenwich Mean Time]",
|
||||
"Indian/Antananarivo": "Indian/Antananarivo [Eastern African Time]",
|
||||
"Indian/Chagos": "Indian/Chagos [Indian Ocean Territory Time]",
|
||||
"Indian/Christmas": "Indian/Christmas [Christmas Island Time]",
|
||||
"Indian/Cocos": "Indian/Cocos [Cocos Islands Time]",
|
||||
"Indian/Comoro": "Indian/Comoro [Eastern African Time]",
|
||||
"Indian/Kerguelen": "Indian/Kerguelen [French Southern & Antarctic Lands Time]",
|
||||
"Indian/Mahe": "Indian/Mahe [Seychelles Time]",
|
||||
"Indian/Maldives": "Indian/Maldives [Maldives Time]",
|
||||
"Indian/Mauritius": "Indian/Mauritius [Mauritius Time]",
|
||||
"Indian/Mayotte": "Indian/Mayotte [Eastern African Time]",
|
||||
"Indian/Reunion": "Indian/Reunion [Reunion Time]",
|
||||
"Iran": "Iran [Iran Standard Time]",
|
||||
"Israel": "Israel [Israel Standard Time]",
|
||||
"JST": "JST [Japan Standard Time]",
|
||||
"Jamaica": "Jamaica [Eastern Standard Time]",
|
||||
"Japan": "Japan [Japan Standard Time]",
|
||||
"Kwajalein": "Kwajalein [Marshall Islands Time]",
|
||||
"Libya": "Libya [Eastern European Time]",
|
||||
"MET": "MET [Middle Europe Time]",
|
||||
"MIT": "MIT [West Samoa Time]",
|
||||
"MST": "MST [Mountain Standard Time]",
|
||||
"MST7MDT": "MST7MDT [Mountain Standard Time]",
|
||||
"Mexico/BajaNorte": "Mexico/BajaNorte [Pacific Standard Time]",
|
||||
"Mexico/BajaSur": "Mexico/BajaSur [Mountain Standard Time]",
|
||||
"Mexico/General": "Mexico/General [Central Standard Time]",
|
||||
"Mideast/Riyadh87": "Mideast/Riyadh87 [GMT+03:07]",
|
||||
"Mideast/Riyadh88": "Mideast/Riyadh88 [GMT+03:07]",
|
||||
"Mideast/Riyadh89": "Mideast/Riyadh89 [GMT+03:07]",
|
||||
"NET": "NET [Armenia Time]",
|
||||
"NST": "NST [New Zealand Standard Time]",
|
||||
"NZ": "NZ [New Zealand Standard Time]",
|
||||
"NZ-CHAT": "NZ-CHAT [Chatham Standard Time]",
|
||||
"Navajo": "Navajo [Mountain Standard Time]",
|
||||
"PLT": "PLT [Pakistan Time]",
|
||||
"PNT": "PNT [Mountain Standard Time]",
|
||||
"PRC": "PRC [China Standard Time]",
|
||||
"PRT": "PRT [Atlantic Standard Time]",
|
||||
"PST": "PST [Pacific Standard Time]",
|
||||
"PST8PDT": "PST8PDT [Pacific Standard Time]",
|
||||
"Pacific/Apia": "Pacific/Apia [West Samoa Time]",
|
||||
"Pacific/Auckland": "Pacific/Auckland [New Zealand Standard Time]",
|
||||
"Pacific/Chatham": "Pacific/Chatham [Chatham Standard Time]",
|
||||
"Pacific/Chuuk": "Pacific/Chuuk [GMT+10:00]",
|
||||
"Pacific/Easter": "Pacific/Easter [Easter Is. Time]",
|
||||
"Pacific/Efate": "Pacific/Efate [Vanuatu Time]",
|
||||
"Pacific/Enderbury": "Pacific/Enderbury [Phoenix Is. Time]",
|
||||
"Pacific/Fakaofo": "Pacific/Fakaofo [Tokelau Time]",
|
||||
"Pacific/Fiji": "Pacific/Fiji [Fiji Time]",
|
||||
"Pacific/Funafuti": "Pacific/Funafuti [Tuvalu Time]",
|
||||
"Pacific/Galapagos": "Pacific/Galapagos [Galapagos Time]",
|
||||
"Pacific/Gambier": "Pacific/Gambier [Gambier Time]",
|
||||
"Pacific/Guadalcanal": "Pacific/Guadalcanal [Solomon Is. Time]",
|
||||
"Pacific/Guam": "Pacific/Guam [Chamorro Standard Time]",
|
||||
"Pacific/Honolulu": "Pacific/Honolulu [Hawaii Standard Time]",
|
||||
"Pacific/Johnston": "Pacific/Johnston [Hawaii Standard Time]",
|
||||
"Pacific/Kiritimati": "Pacific/Kiritimati [Line Is. Time]",
|
||||
"Pacific/Kosrae": "Pacific/Kosrae [Kosrae Time]",
|
||||
"Pacific/Kwajalein": "Pacific/Kwajalein [Marshall Islands Time]",
|
||||
"Pacific/Majuro": "Pacific/Majuro [Marshall Islands Time]",
|
||||
"Pacific/Marquesas": "Pacific/Marquesas [Marquesas Time]",
|
||||
"Pacific/Midway": "Pacific/Midway [Samoa Standard Time]",
|
||||
"Pacific/Nauru": "Pacific/Nauru [Nauru Time]",
|
||||
"Pacific/Niue": "Pacific/Niue [Niue Time]",
|
||||
"Pacific/Norfolk": "Pacific/Norfolk [Norfolk Time]",
|
||||
"Pacific/Noumea": "Pacific/Noumea [New Caledonia Time]",
|
||||
"Pacific/Pago_Pago": "Pacific/Pago_Pago [Samoa Standard Time]",
|
||||
"Pacific/Palau": "Pacific/Palau [Palau Time]",
|
||||
"Pacific/Pitcairn": "Pacific/Pitcairn [Pitcairn Standard Time]",
|
||||
"Pacific/Pohnpei": "Pacific/Pohnpei [GMT+11:00]",
|
||||
"Pacific/Ponape": "Pacific/Ponape [Ponape Time]",
|
||||
"Pacific/Port_Moresby": "Pacific/Port_Moresby [Papua New Guinea Time]",
|
||||
"Pacific/Rarotonga": "Pacific/Rarotonga [Cook Is. Time]",
|
||||
"Pacific/Saipan": "Pacific/Saipan [Chamorro Standard Time]",
|
||||
"Pacific/Samoa": "Pacific/Samoa [Samoa Standard Time]",
|
||||
"Pacific/Tahiti": "Pacific/Tahiti [Tahiti Time]",
|
||||
"Pacific/Tarawa": "Pacific/Tarawa [Gilbert Is. Time]",
|
||||
"Pacific/Tongatapu": "Pacific/Tongatapu [Tonga Time]",
|
||||
"Pacific/Truk": "Pacific/Truk [Truk Time]",
|
||||
"Pacific/Wake": "Pacific/Wake [Wake Time]",
|
||||
"Pacific/Wallis": "Pacific/Wallis [Wallis & Futuna Time]",
|
||||
"Pacific/Yap": "Pacific/Yap [Truk Time]",
|
||||
"Portugal": "Portugal [Western European Time]",
|
||||
"ROK": "ROK [Korea Standard Time]",
|
||||
"SST": "SST [Solomon Is. Time]",
|
||||
"Singapore": "Singapore [Singapore Time]",
|
||||
"SystemV/AST4": "SystemV/AST4 [Atlantic Standard Time]",
|
||||
"SystemV/AST4ADT": "SystemV/AST4ADT [Atlantic Standard Time]",
|
||||
"SystemV/CST6": "SystemV/CST6 [Central Standard Time]",
|
||||
"SystemV/CST6CDT": "SystemV/CST6CDT [Central Standard Time]",
|
||||
"SystemV/EST5": "SystemV/EST5 [Eastern Standard Time]",
|
||||
"SystemV/EST5EDT": "SystemV/EST5EDT [Eastern Standard Time]",
|
||||
"SystemV/HST10": "SystemV/HST10 [Hawaii Standard Time]",
|
||||
"SystemV/MST7": "SystemV/MST7 [Mountain Standard Time]",
|
||||
"SystemV/MST7MDT": "SystemV/MST7MDT [Mountain Standard Time]",
|
||||
"SystemV/PST8": "SystemV/PST8 [Pacific Standard Time]",
|
||||
"SystemV/PST8PDT": "SystemV/PST8PDT [Pacific Standard Time]",
|
||||
"SystemV/YST9": "SystemV/YST9 [Alaska Standard Time]",
|
||||
"SystemV/YST9YDT": "SystemV/YST9YDT [Alaska Standard Time]",
|
||||
"Turkey": "Turkey [Eastern European Time]",
|
||||
"UCT": "UCT [Coordinated Universal Time]",
|
||||
"US/Alaska": "US/Alaska [Alaska Standard Time]",
|
||||
"US/Aleutian": "US/Aleutian [Hawaii-Aleutian Standard Time]",
|
||||
"US/Arizona": "US/Arizona [Mountain Standard Time]",
|
||||
"US/Central": "US/Central [Central Standard Time]",
|
||||
"US/East-Indiana": "US/East-Indiana [Eastern Standard Time]",
|
||||
"US/Eastern": "US/Eastern [Eastern Standard Time]",
|
||||
"US/Hawaii": "US/Hawaii [Hawaii Standard Time]",
|
||||
"US/Indiana-Starke": "US/Indiana-Starke [Central Standard Time]",
|
||||
"US/Michigan": "US/Michigan [Eastern Standard Time]",
|
||||
"US/Mountain": "US/Mountain [Mountain Standard Time]",
|
||||
"US/Pacific": "US/Pacific [Pacific Standard Time]",
|
||||
"US/Pacific-New": "US/Pacific-New [Pacific Standard Time]",
|
||||
"US/Samoa": "US/Samoa [Samoa Standard Time]",
|
||||
"UTC": "UTC [Coordinated Universal Time]",
|
||||
"Universal": "Universal [Coordinated Universal Time]",
|
||||
"VST": "VST [Indochina Time]",
|
||||
"W-SU": "W-SU [Moscow Standard Time]",
|
||||
"WET": "WET [Western European Time]",
|
||||
"Zulu": "Zulu [Coordinated Universal Time]"
|
||||
}
|
||||
438
ui/src/views/storage/FormSchedule.vue
Normal file
438
ui/src/views/storage/FormSchedule.vue
Normal file
@ -0,0 +1,438 @@
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
<template>
|
||||
<a-spin :spinning="loading">
|
||||
<div class="form-layout">
|
||||
<label>
|
||||
{{ $t('label.header.volume.snapshot') }}
|
||||
</label>
|
||||
<div class="form">
|
||||
<a-form
|
||||
:form="form"
|
||||
layout="vertical"
|
||||
@submit="handleSubmit">
|
||||
<a-row :gutter="12">
|
||||
<a-col :md="24" :lg="24">
|
||||
<a-form-item :label="$t('intervaltype')">
|
||||
<a-radio-group
|
||||
v-decorator="['intervaltype', {
|
||||
initialValue: intervalType
|
||||
}]"
|
||||
buttonStyle="solid"
|
||||
@change="handleChangeIntervalType">
|
||||
<a-radio-button value="hourly" :disabled="handleVisibleInterval(0)">
|
||||
{{ $t('HOURLY') }}
|
||||
</a-radio-button>
|
||||
<a-radio-button value="daily" :disabled="handleVisibleInterval(1)">
|
||||
{{ $t('DAILY') }}
|
||||
</a-radio-button>
|
||||
<a-radio-button value="weekly" :disabled="handleVisibleInterval(2)">
|
||||
{{ $t('WEEKLY') }}
|
||||
</a-radio-button>
|
||||
<a-radio-button value="monthly" :disabled="handleVisibleInterval(3)">
|
||||
{{ $t('MONTHLY') }}
|
||||
</a-radio-button>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="24" :lg="12" v-if="intervalType==='hourly'">
|
||||
<a-form-item :label="$t('time')">
|
||||
<a-tooltip
|
||||
placement="right"
|
||||
:title="$t('label.minute.past.hour')">
|
||||
<a-input-number
|
||||
style="width: 100%"
|
||||
v-decorator="['time', {
|
||||
rules: [{required: true, message: 'Please enter input'}]
|
||||
}]"
|
||||
:min="1"
|
||||
:max="59"/>
|
||||
</a-tooltip>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="24" :lg="12" v-if="['daily', 'weekly', 'monthly'].includes(intervalType)">
|
||||
<a-form-item
|
||||
class="custom-time-select"
|
||||
:label="$t('time')">
|
||||
<a-time-picker
|
||||
use12Hours
|
||||
format="h:mm A"
|
||||
v-decorator="['timeSelect', {
|
||||
rules: [{
|
||||
type: 'object',
|
||||
required: true,
|
||||
message: 'Please select time'
|
||||
}]
|
||||
}]" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="24" :lg="12" v-if="intervalType==='weekly'">
|
||||
<a-form-item :label="$t('label.day.of.week')">
|
||||
<a-select
|
||||
v-decorator="['day-of-week', {
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'Please select option'
|
||||
}]
|
||||
}]" >
|
||||
<a-select-option v-for="(opt, optIndex) in dayOfWeek" :key="optIndex">
|
||||
{{ opt.name || opt.description }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="24" :lg="12" v-if="intervalType==='monthly'">
|
||||
<a-form-item :label="$t('label.day.of.month')">
|
||||
<a-select
|
||||
v-decorator="['day-of-month', {
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'Please select option'
|
||||
}]
|
||||
}]">
|
||||
<a-select-option v-for="opt in dayOfMonth" :key="opt.name">
|
||||
{{ opt.name }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="24" :lg="12">
|
||||
<a-form-item :label="$t('keep')">
|
||||
<a-tooltip
|
||||
placement="right"
|
||||
:title="$t('Snapshots')">
|
||||
<a-input-number
|
||||
style="width: 100%"
|
||||
v-decorator="['maxsnaps', {
|
||||
rules: [{ required: true, message: 'Please enter input'}]
|
||||
}]"
|
||||
:min="1"
|
||||
:max="8" />
|
||||
</a-tooltip>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="24" :lg="24">
|
||||
<a-form-item :label="$t('timezone')">
|
||||
<a-select
|
||||
showSearch
|
||||
v-decorator="['timezone', {
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'Please select option'
|
||||
}]
|
||||
}]"
|
||||
:loading="fetching">
|
||||
<a-select-option v-for="opt in timeZoneMap" :key="opt.id">
|
||||
{{ opt.name || opt.description }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider/>
|
||||
<div class="tagsTitle">{{ $t('tags') }}</div>
|
||||
<div>
|
||||
<template v-for="(tag, index) in tags">
|
||||
<a-tag :key="index" :closable="true" :afterClose="() => handleDeleteTag(tag)">
|
||||
{{ tag.key }} = {{ tag.value }}
|
||||
</a-tag>
|
||||
</template>
|
||||
<div v-if="inputVisible">
|
||||
<a-input-group
|
||||
type="text"
|
||||
size="small"
|
||||
@blur="handleInputConfirm"
|
||||
@keyup.enter="handleInputConfirm"
|
||||
compact>
|
||||
<a-input ref="input" :value="inputKey" @change="handleKeyChange" style="width: 100px; text-align: center" placeholder="Key" />
|
||||
<a-input style=" width: 30px; border-left: 0; pointer-events: none; backgroundColor: #fff" placeholder="=" disabled />
|
||||
<a-input :value="inputValue" @change="handleValueChange" style="width: 100px; text-align: center; border-left: 0" placeholder="Value" />
|
||||
<a-button shape="circle" size="small" @click="handleInputConfirm">
|
||||
<a-icon type="check"/>
|
||||
</a-button>
|
||||
<a-button shape="circle" size="small" @click="inputVisible=false">
|
||||
<a-icon type="close"/>
|
||||
</a-button>
|
||||
</a-input-group>
|
||||
</div>
|
||||
<a-tag v-else @click="showInput" style="background: #fff; borderStyle: dashed;">
|
||||
<a-icon type="plus" /> {{ $t('label.new.tag') }}
|
||||
</a-tag>
|
||||
</div>
|
||||
<div :span="24" class="action-button">
|
||||
<a-button
|
||||
:loading="actionLoading"
|
||||
@click="closeAction">
|
||||
{{ this.$t('Cancel') }}
|
||||
</a-button>
|
||||
<a-button
|
||||
v-if="handleShowButton()"
|
||||
:loading="actionLoading"
|
||||
type="primary"
|
||||
@click="handleSubmit">
|
||||
{{ this.$t('OK') }}
|
||||
</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
</div>
|
||||
</div>
|
||||
</a-spin>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { api } from '@/api'
|
||||
import { timeZone } from '@/utils/timezone'
|
||||
import debounce from 'lodash/debounce'
|
||||
|
||||
export default {
|
||||
name: 'FormSchedule',
|
||||
props: {
|
||||
loading: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
dataSource: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
resource: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data () {
|
||||
this.fetchTimeZone = debounce(this.fetchTimeZone, 800)
|
||||
|
||||
return {
|
||||
actionLoading: false,
|
||||
volumeId: '',
|
||||
inputKey: '',
|
||||
inputVisible: '',
|
||||
inputValue: '',
|
||||
intervalType: 'hourly',
|
||||
intervalValue: 0,
|
||||
tags: [],
|
||||
dayOfWeek: [],
|
||||
dayOfMonth: [],
|
||||
timeZoneMap: [],
|
||||
fetching: false,
|
||||
listDayOfWeek: ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
|
||||
}
|
||||
},
|
||||
beforeCreate () {
|
||||
this.form = this.$form.createForm(this)
|
||||
},
|
||||
mounted () {
|
||||
this.volumeId = this.resource.id
|
||||
this.fetchTimeZone()
|
||||
},
|
||||
methods: {
|
||||
fetchTimeZone (value) {
|
||||
this.timeZoneMap = []
|
||||
this.fetching = true
|
||||
|
||||
timeZone(value).then(json => {
|
||||
this.timeZoneMap = json
|
||||
this.fetching = false
|
||||
})
|
||||
},
|
||||
fetchDayOfWeek () {
|
||||
this.dayOfWeek = []
|
||||
|
||||
for (const index in this.listDayOfWeek) {
|
||||
const dayName = this.listDayOfWeek[index]
|
||||
this.dayOfWeek.push({
|
||||
id: dayName,
|
||||
name: this.$t(dayName)
|
||||
})
|
||||
}
|
||||
},
|
||||
fetchDayOfMonth () {
|
||||
this.dayOfMonth = []
|
||||
const maxDayOfMonth = 28
|
||||
for (let num = 1; num <= maxDayOfMonth; num++) {
|
||||
this.dayOfMonth.push({
|
||||
id: num,
|
||||
name: num
|
||||
})
|
||||
}
|
||||
},
|
||||
handleChangeIntervalType (e) {
|
||||
this.intervalType = e.target.value
|
||||
|
||||
switch (this.intervalType) {
|
||||
case 'hourly':
|
||||
this.intervalValue = 0
|
||||
break
|
||||
case 'daily':
|
||||
this.intervalValue = 1
|
||||
break
|
||||
case 'weekly':
|
||||
this.intervalValue = 2
|
||||
this.fetchDayOfWeek()
|
||||
break
|
||||
case 'monthly':
|
||||
this.intervalValue = 3
|
||||
this.fetchDayOfMonth()
|
||||
break
|
||||
}
|
||||
},
|
||||
handleVisibleInterval (intervalType) {
|
||||
if (this.dataSource.length === 0) {
|
||||
return false
|
||||
}
|
||||
const dataSource = this.dataSource.filter(item => item.intervaltype === intervalType)
|
||||
if (dataSource && dataSource.length > 0) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
},
|
||||
handleShowButton () {
|
||||
if (this.dataSource.length === 0) {
|
||||
return true
|
||||
}
|
||||
const dataSource = this.dataSource.filter(item => item.intervaltype === this.intervalValue)
|
||||
if (dataSource && dataSource.length > 0) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
handleKeyChange (e) {
|
||||
this.inputKey = e.target.value
|
||||
},
|
||||
handleValueChange (e) {
|
||||
this.inputValue = e.target.value
|
||||
},
|
||||
handleInputConfirm () {
|
||||
this.tags.push({
|
||||
key: this.inputKey,
|
||||
value: this.inputValue
|
||||
})
|
||||
this.inputVisible = false
|
||||
this.inputKey = ''
|
||||
this.inputValue = ''
|
||||
},
|
||||
handleDeleteTag (tag) {
|
||||
},
|
||||
handleSubmit (e) {
|
||||
this.form.validateFields((error, values) => {
|
||||
if (error) {
|
||||
return
|
||||
}
|
||||
|
||||
let params = {}
|
||||
params.volumeid = this.volumeId
|
||||
params.intervaltype = values.intervaltype
|
||||
params.timezone = values.timezone
|
||||
params.maxsnaps = values.maxsnaps
|
||||
switch (values.intervaltype) {
|
||||
case 'hourly':
|
||||
params.schedule = values.time
|
||||
break
|
||||
case 'daily':
|
||||
params.schedule = values.timeSelect.format('mm:HH')
|
||||
break
|
||||
case 'weekly':
|
||||
params.schedule = [values.timeSelect.format('mm:HH'), (values['day-of-week'] + 1)].join(':')
|
||||
break
|
||||
case 'monthly':
|
||||
params.schedule = [values.timeSelect.format('mm:HH'), values['day-of-month']].join(':')
|
||||
break
|
||||
}
|
||||
for (let i = 0; i < this.tags.length; i++) {
|
||||
const formattedTagData = {}
|
||||
const tag = this.tags[i]
|
||||
formattedTagData['tags[' + i + '].key'] = tag.key
|
||||
formattedTagData['tags[' + i + '].value'] = tag.value
|
||||
params = Object.assign({}, params, formattedTagData)
|
||||
}
|
||||
this.actionLoading = true
|
||||
api('createSnapshotPolicy', params).then(json => {
|
||||
this.$emit('refresh')
|
||||
this.$notification.success({
|
||||
message: 'Recurring Snapshots',
|
||||
description: 'Successfully recurring snapshots'
|
||||
})
|
||||
this.resetForm()
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}).finally(() => {
|
||||
this.actionLoading = false
|
||||
})
|
||||
})
|
||||
},
|
||||
showInput () {
|
||||
this.inputVisible = true
|
||||
this.$nextTick(function () {
|
||||
this.$refs.input.focus()
|
||||
})
|
||||
},
|
||||
resetForm () {
|
||||
this.form.setFieldsValue({
|
||||
time: undefined,
|
||||
timezone: undefined,
|
||||
timeSelect: undefined,
|
||||
maxsnaps: undefined,
|
||||
'day-of-week': undefined,
|
||||
'day-of-month': undefined
|
||||
})
|
||||
this.tags = []
|
||||
},
|
||||
closeAction () {
|
||||
this.$emit('close-action')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.form-layout {
|
||||
.ant-tag {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/deep/.custom-time-select .ant-time-picker {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/deep/.ant-divider-horizontal {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.form {
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.tagsTitle {
|
||||
font-weight: 500;
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.action-button {
|
||||
text-align: right;
|
||||
|
||||
button {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
95
ui/src/views/storage/RecurringSnapshotVolume.vue
Normal file
95
ui/src/views/storage/RecurringSnapshotVolume.vue
Normal file
@ -0,0 +1,95 @@
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
<template>
|
||||
<div class="snapshot-layout">
|
||||
<a-tabs defaultActiveKey="1">
|
||||
<a-tab-pane :tab="$t('schedule')" key="1">
|
||||
<FormSchedule
|
||||
:loading="loading"
|
||||
:resource="resource"
|
||||
:dataSource="dataSource"
|
||||
@close-action="closeAction"
|
||||
@refresh="handleRefresh"/>
|
||||
</a-tab-pane>
|
||||
<a-tab-pane :tab="$t('label.scheduled.snapshots')" key="2">
|
||||
<ScheduledSnapshots
|
||||
:loading="loading"
|
||||
:resource="resource"
|
||||
:dataSource="dataSource"
|
||||
@refresh="handleRefresh"
|
||||
@close-action="closeAction"/>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { api } from '@/api'
|
||||
import FormSchedule from '@/views/storage/FormSchedule'
|
||||
import ScheduledSnapshots from '@/views/storage/ScheduledSnapshots'
|
||||
|
||||
export default {
|
||||
name: 'RecurringSnapshotVolume',
|
||||
components: {
|
||||
FormSchedule,
|
||||
ScheduledSnapshots
|
||||
},
|
||||
props: {
|
||||
resource: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
loading: false,
|
||||
dataSource: []
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
this.fetchData()
|
||||
},
|
||||
methods: {
|
||||
fetchData () {
|
||||
const params = {}
|
||||
this.dataSource = []
|
||||
this.loading = true
|
||||
params.volumeid = this.resource.id
|
||||
api('listSnapshotPolicies', params).then(json => {
|
||||
this.loading = false
|
||||
const listSnapshotPolicies = json.listsnapshotpoliciesresponse.snapshotpolicy
|
||||
if (listSnapshotPolicies && listSnapshotPolicies.length > 0) {
|
||||
this.dataSource = listSnapshotPolicies
|
||||
}
|
||||
})
|
||||
},
|
||||
handleRefresh () {
|
||||
this.fetchData()
|
||||
},
|
||||
closeAction () {
|
||||
this.$emit('close-action')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.snapshot-layout {
|
||||
max-width: 600px;
|
||||
}
|
||||
</style>
|
||||
226
ui/src/views/storage/ScheduledSnapshots.vue
Normal file
226
ui/src/views/storage/ScheduledSnapshots.vue
Normal file
@ -0,0 +1,226 @@
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
<template>
|
||||
<div class="list-schedule">
|
||||
<a-table
|
||||
size="small"
|
||||
:columns="columns"
|
||||
:dataSource="dataSchedules"
|
||||
:rowKey="record => record.id"
|
||||
:pagination="false"
|
||||
:loading="loading">
|
||||
<div slot="icon" slot-scope="text, record">
|
||||
<label class="interval-icon">
|
||||
<span v-if="record.intervaltype===0">
|
||||
<a-icon type="clock-circle" />
|
||||
</span>
|
||||
<span class="custom-icon icon-daily" v-else-if="record.intervaltype===1">
|
||||
<a-icon type="calendar" />
|
||||
</span>
|
||||
<span class="custom-icon icon-weekly" v-else-if="record.intervaltype===2">
|
||||
<a-icon type="calendar" />
|
||||
</span>
|
||||
<span class="custom-icon icon-monthly" v-else-if="record.intervaltype===3">
|
||||
<a-icon type="calendar" />
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
<div slot="time" slot-scope="text, record">
|
||||
<label class="interval-content">
|
||||
<span v-if="record.intervaltype===0">{{ record.schedule + $t('label.min.past.hour') }}</span>
|
||||
<span v-else>{{ record.schedule.split(':')[1] + ':' + record.schedule.split(':')[0] }}</span>
|
||||
</label>
|
||||
</div>
|
||||
<div slot="interval" slot-scope="text, record">
|
||||
<span v-if="record.intervaltype===2">
|
||||
{{ $t('label.interval.weekly').replace('{number}', $t(listDayOfWeek[record.schedule.split(':')[2] - 1])) }}
|
||||
</span>
|
||||
<span v-else-if="record.intervaltype===3">
|
||||
{{ $t('label.interval.monthly').replace('{number}', record.schedule.split(':')[2]) }}
|
||||
</span>
|
||||
</div>
|
||||
<div slot="timezone" slot-scope="text, record">
|
||||
<label>{{ getTimeZone(record.timezone) }}</label>
|
||||
</div>
|
||||
<div slot="tags" slot-scope="text, record">
|
||||
<a-tag v-for="(tag, index) in record.tags" :key="index">{{ tag.key + '=' + tag.value }}</a-tag>
|
||||
</div>
|
||||
<div slot="action" class="account-button-action" slot-scope="text, record">
|
||||
<a-tooltip placement="top">
|
||||
<template slot="title">
|
||||
{{ $t('label.delete.schedule') }}
|
||||
</template>
|
||||
<a-button
|
||||
type="danger"
|
||||
shape="circle"
|
||||
icon="close"
|
||||
size="small"
|
||||
:loading="actionLoading"
|
||||
@click="handleClickDelete(record)"/>
|
||||
</a-tooltip>
|
||||
</div>
|
||||
</a-table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { api } from '@/api'
|
||||
import { timeZoneName } from '@/utils/timezone'
|
||||
|
||||
export default {
|
||||
name: 'ScheduledSnapshots',
|
||||
props: {
|
||||
loading: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
dataSource: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
resource: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
actionLoading: false,
|
||||
columns: [],
|
||||
dataSchedules: [],
|
||||
listDayOfWeek: ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.columns = [
|
||||
{
|
||||
title: '',
|
||||
dataIndex: 'icon',
|
||||
width: 30,
|
||||
scopedSlots: { customRender: 'icon' }
|
||||
},
|
||||
{
|
||||
title: this.$t('time'),
|
||||
dataIndex: 'schedule',
|
||||
scopedSlots: { customRender: 'time' }
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
dataIndex: 'interval',
|
||||
scopedSlots: { customRender: 'interval' }
|
||||
},
|
||||
{
|
||||
title: this.$t('timezone'),
|
||||
dataIndex: 'timezone',
|
||||
scopedSlots: { customRender: 'timezone' }
|
||||
},
|
||||
{
|
||||
title: this.$t('keep'),
|
||||
dataIndex: 'maxsnaps',
|
||||
scopedSlots: { customRender: 'keep' }
|
||||
},
|
||||
{
|
||||
title: this.$t('tags'),
|
||||
dataIndex: 'tags',
|
||||
scopedSlots: { customRender: 'tags' }
|
||||
},
|
||||
{
|
||||
title: this.$t('action'),
|
||||
dataIndex: 'action',
|
||||
width: 50,
|
||||
scopedSlots: { customRender: 'action' }
|
||||
}
|
||||
]
|
||||
},
|
||||
mounted () {
|
||||
this.dataSchedules = this.dataSource
|
||||
},
|
||||
watch: {
|
||||
dataSource (newData, oldData) {
|
||||
this.dataSchedules = newData
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleClickDelete (record) {
|
||||
const params = {}
|
||||
params.id = record.id
|
||||
this.actionLoading = true
|
||||
api('deleteSnapshotPolicies', params).then(json => {
|
||||
if (json.deletesnapshotpoliciesresponse.success) {
|
||||
this.$notification.success({
|
||||
message: 'Delete Snapshot Policy',
|
||||
description: 'Successfully deleted snapshot policy'
|
||||
})
|
||||
|
||||
this.$emit('refresh')
|
||||
}
|
||||
}).catch(error => {
|
||||
this.$notification.error({
|
||||
message: 'Request Failed',
|
||||
description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
|
||||
})
|
||||
}).finally(() => {
|
||||
this.actionLoading = false
|
||||
})
|
||||
},
|
||||
getTimeZone (timeZone) {
|
||||
return timeZoneName(timeZone)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.interval-icon {
|
||||
span {
|
||||
position: relative;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.custom-icon:before {
|
||||
font-size: 8px;
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
left: 3.5px;
|
||||
color: #000;
|
||||
font-weight: 700;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.icon-daily:before {
|
||||
content: "01";
|
||||
left: 5px;
|
||||
top: 7px;
|
||||
line-height: 1.9;
|
||||
}
|
||||
|
||||
.icon-weekly:before {
|
||||
content: "1-7";
|
||||
left: 3px;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.icon-monthly:before {
|
||||
content: "***";
|
||||
}
|
||||
}
|
||||
|
||||
/deep/.ant-btn > .anticon {
|
||||
line-height: 1.8;
|
||||
}
|
||||
</style>
|
||||
Loading…
x
Reference in New Issue
Block a user