ETMS Cloud

Infrastructure Management Login

{{ loginError }}

{{ view }}

{{ currentUser.username[0].toUpperCase() }}
{{ currentUser.username }}
DEPLOYMENT LOGS: {{ task.type }}
{{ task.error ? 'FAILED' : (task.finished ? 'COMPLETED' : 'IN PROGRESS') }}
{{ log.message }} ...
{{ log.detail }}
IdentityResourcesStatusAppsActions
{{ site.subdomain }}
{{ site.domain }}
{{ site.bench_name }} ({{ getBenchVersion(site.bench_name) }}) Credentials Update Available
{{ site.metrics?.cpu || '0%' }} {{ site.metrics?.mem || '0MB' }} {{ site.metrics?.disk || '0MB' }}
Maint
Failure
Online
Page {{ sitePage }} of {{ totalSitePages }}

{{ app.name }}

{{ app.version || 'main' }} {{ app.branch }} Requires: {{ app.requirements }}

{{ app.description || 'No description provided' }}

No Applications

Click New App to add one, or adjust filters.

Page {{ appsPage }} of {{ totalAppsPages }}
ID: {{ b.id }}

{{ b.name }}

{{ b.frappe_version }}
Port: {{ b.port }} Sites: {{ sites.filter(s => s.bench_name === b.name).length }} Status: Ready
{{ tag.tag_name }}
{{ t.name }}
Page {{ benchPage }} of {{ totalBenchPages }}

Bench Groups

{{ g.name }}

{{ new Date(g.created_at).toLocaleDateString() }} {{ g.version }}

{{ g.description }}

No description provided.

{{ bName }}
No benches in this group.
Total Sites in Group: {{ sites.filter(s => g.bench_names.includes(s.bench_name)).length }} Sites
No bench groups found matching your search. Click "New Group" to create one!
Page {{ benchGroupsPage }} of {{ totalBenchGroupsPages }}

Server Status

{{ s.name }}

{{ s.status }}

Created At: {{ new Date(s.created_at).toLocaleDateString() }}

CPU Cores {{ s.cpu_cores }} Cores
Total RAM {{ s.ram_gb }} GB
Disk Storage {{ s.disk_gb }} GB
Active Resources {{ benches.length }} Benches / {{ sites.length }} Sites 0 Benches / 0 Sites
CPU Load {{ s.metrics.cpu_percent }}% 0%
RAM Consumption {{ s.metrics.ram_used_gb }} GB / {{ s.ram_gb }} GB ({{ s.metrics.ram_percent }}%) 0 GB / {{ s.ram_gb }} GB (0%)
Disk Occupied {{ s.metrics.disk_used_gb }} GB / {{ s.disk_gb }} GB ({{ s.metrics.disk_percent }}%) 0 GB / {{ s.disk_gb }} GB (0%)
No servers found matching your search. Try adjusting your query or click "Add Server" to add a new node!

System Activities

ActionTargetStatusTime
{{ a.job_type }} {{ a.target }} {{ a.status }} {{ new Date(a.created_at).toLocaleString() }}
No activities recorded matching criteria.
Page {{ activitiesPage }} of {{ totalActivitiesPages }}

System Configuration

Configure external platform integrations and custom system tags

Integrations

Connect your external accounts to automate workflows and sync data across platforms.

GitHub Integrations
{{ githubAccounts.length }} Account{{ githubAccounts.length > 1 ? 's' : '' }} Connected Not Connected
{{ acc.alias }}
@{{ acc.username }}
{{ acc.type === 'others' ? 'Others' : 'ETMS' }} Active

No GitHub Accounts Connected

Connect one or more GitHub accounts to easily pull private repositories into benches.

Connecting your GitHub accounts allows you to import repositories as global applications directly from your integrations.

AI & Diagnostics
{{ aiProvidersList.length }} Provider{{ aiProvidersList.length > 1 ? 's' : '' }} Configured Disabled
{{ prov.alias }} Active
{{ prov.provider === 'gemini' ? 'Google Gemini' : prov.provider === 'openai' ? 'OpenAI' : 'Ollama' }} {{ prov.model }}
Connected
Failed
{{ prov.testError }}

No AI Providers Connected

Connect one or more AI providers like Google Gemini or OpenAI to enable log diagnostics.

Enabling AI diagnostics allows the platform to analyze server logs, identify deployment issues, and recommend one-click automated fixes.

Categorization

Create and manage custom tags to organize your sites, benches, and applications dynamically.

Tags Management

Organize system items dynamically with custom labels

Create New Tag
System Tags
No tags created yet.
{{ tag.name }}

Change Password

Secure your account by updating your credential secret

{{ profileError }}
Password changed successfully!

IAM Users ({{ iamUsers.length }})

UsernameGroupsDirect PoliciesManageCreated At
{{ usr.username[0].toUpperCase() }}
{{ usr.username }} Superuser
{{ g.name }}
{{ p.name }}
{{ new Date(usr.created_at).toLocaleString() }}

IAM Groups ({{ iamGroups.length }})

Group NameDescriptionAttached PoliciesUsersManage
{{ grp.name }}
{{ grp.description }}
{{ p.name }}
{{ grp.users.map(u => u.username).join(', ') || 'No users' }}
No groups created yet.

IAM Policies ({{ iamPolicies.length }})

Policy NameDescriptionDocumentManageCreated At
{{ pol.name }} AWS Default
{{ pol.description }} Locked {{ new Date(pol.created_at).toLocaleString() }}
No jobs recorded matching criteria.
{{ j.job_type }}
{{ j.target }}
{{ j.status }} {{ new Date(j.started_at).toLocaleString() }}
Loading pipeline steps...
No steps recorded for this job.
Pipeline Steps ({{ jobSteps.length }}) All Completed
{{ new Date(s.created_at).toLocaleTimeString() }}
Page {{ jobsPage }} of {{ totalJobsPages }}
ActionTargetError SummaryDetailTime
{{ log.job_type }} {{ log.target }} {{ log.error_summary }} {{ new Date(log.created_at).toLocaleString() }}
No error logs recorded matching criteria.
Page {{ logsPage }} of {{ totalLogsPages }}

Connect GitHub

Generate a token with repo permissions on GitHub settings to allow cloning.

Connect AI Provider

New Bench

Provision Site

Create a new site in one of your active benches.

Default Login Credentials After the site is successfully created, log in to Frappe using:
Username: Administrator (case-sensitive)
Password: changeme
.etms.cloud
{{ siteNameError }}
Loading apps...
No apps found on this bench

Database Backup

Upload database file (.sql or .sql.gz)

{{ newSiteFileNames.db }}

Public Files

Upload public files (-files.tar)

{{ newSiteFileNames.public }}

Private Files

Upload private files (-private-files.tar)

{{ newSiteFileNames.private }}

Site Config

Upload config file (-site_config_backup.json)

{{ newSiteFileNames.config }}

Rename Bench

Drop Bench?

This action is irreversible. All associated sites and data will be permanently destroyed. Are you absolutely sure?

Uninstall {{ appToUninstall }}?

This action is irreversible. All data associated with the {{ appToUninstall }} app on {{ siteToActOn?.subdomain }} will be permanently deleted. Are you absolutely sure?

Renew SSL Cert?

This will force Let's Encrypt to renew the SSL certificate for {{ siteToRenewSSL?.domain }} and all of its custom domains. Would you like to proceed?

Update Site?

This will run database migrations on {{ siteToUpdate?.subdomain }}. A safety backup will be automatically taken before modifying the database. Proceed?

Delete Site?

This action is completely irreversible. The site {{ siteToDelete?.subdomain }} along with its database and all uploaded files will be permanently purged. Are you absolutely sure?

{{ targetStatus === 'Maintenance' ? 'Deactivate Site?' : 'Activate Site?' }}

This will put {{ siteToToggle?.subdomain }} into maintenance mode, making it inaccessible to users. Proceed? This will bring {{ siteToToggle?.subdomain }} back online and accessible. Proceed?

Clear Site Cache?

This will flush Redis cache and clear compiled files for {{ siteToClearCache?.subdomain }}. The next page load might be slightly slower.

{{ siteToActOn?.scheduler_enabled ? 'Disable Scheduler?' : 'Enable Scheduler?' }}

Are you sure you want to {{ siteToActOn?.scheduler_enabled ? 'disable' : 'enable' }} the background scheduler for site {{ siteToActOn?.subdomain }}?

Backups: {{ siteToActOn?.subdomain }}

Take a new manual backup now:
No backups found for this site.
File Name Size Date Download
{{ b.name }} {{ b.size }} MB {{ new Date(b.time * 1000).toLocaleString() }}
DL

Restore Backup

Selected Backup:

{{ backupToRestore?.name }}

* Warning: This will overwrite the target site's database and files.

Critical Action

You are about to overwrite {{ targetSiteForRestore?.subdomain }}. This will permanently erase its current database and files and replace them with the selected backup. Are you absolutely certain?

Backup Selected
{{ backupToRestore?.name }}

Site Config (JSON)

Editing: {{ siteToActOn?.subdomain }}

Manage Domains

Primary Domain
{{ siteToActOn?.domain }}
Primary
Custom DomainActions
No custom domains added yet.
{{ dom }}

Add App

Step {{ fetchAppsWizardStep }} of 2: Add app to {{ benchToActOn?.name }}

Delete Bench Group?

Are you sure you want to delete the group "{{ groupToDelete?.name }}"? This action is permanent and cannot be undone. Note: Deleting this group will not delete the benches belonging to it.

Add Server

Delete Server?

Are you sure you want to remove the server "{{ serverToDelete?.name }}"? This will disconnect the server registry from the manager.

Create Bench Group

Please select a Frappe version first.
No matching benches found.

Bulk Update: {{ selectedGroupForUpdate?.name }}

Select target versions for apps inside all benches of the group. If an app is not installed on a specific bench, it will be skipped automatically.

Add New App

No connected GitHub accounts found for {{ appForm.type === 'etms' ? 'ETMS' : 'Others' }} category. Go to Settings to connect one.
Fetching repositories...
Fetching branches...
{{ tag }}
No requirements selected (Optional)

Update Bench {{ benchToActOn?.name }}

Applying updates to {{ benchToActOn?.name }}

Select apps to update

App From To Status
Loading apps...
No apps found on this bench
{{ app === 'frappe' ? 'Frappe Framework' : (app === 'erpnext' ? 'ERPNext' : app) }} {{ appVersionInfo[app] ? (appVersionInfo[app].current_version || 'Unknown') : 'Loading...' }}
No Remote
Checking... Local App Update Avail. Latest Version

Switch App Branch {{ benchToActOn?.name }}

Switching branches on {{ benchToActOn?.name }}

Select apps to switch branches

App From To Branch Status
Loading apps...
No apps found on this bench
{{ app === 'frappe' ? 'Frappe Framework' : (app === 'erpnext' ? 'ERPNext' : app) }} {{ appVersionInfo[app] ? (appVersionInfo[app].current_version || 'Unknown') : 'Loading...' }}
No Remote
Checking... Local App Branch Switch Same Branch

Build Site Assets {{ siteToActOn?.subdomain }}

Rebuild CSS & JS assets for site

Loading site apps...

Select which application's assets you want to build:

Remove App from Bench

Uninstall App v2.1.5

Warning: Forcefully removing an app uninstalls it from the bench. Make sure it is uninstalled from all active sites first. This action is irreversible.
No extra apps installed
{{ app }} Installed on {{ benchToActOn?.name }}

Remove {{ removeAppForm.app_name }}?

This action is irreversible. All data, customizations, and code associated with the {{ removeAppForm.app_name }} app will be completely purged from {{ benchToActOn?.name }}. Are you absolutely sure?

Manage Apps

Apps for {{ siteToActOn?.domain }}

Loading apps...
No apps found on this bench
{{ app }} {{ appVersionInfo[app].current_version }}
Default
Installed

Bench Configuration (common_site_config.json)

{{ selectedError.job_type }}
{{ selectedError.target }}
{{ selectedError.error_detail || 'No detail available.' }}
AI Agent Diagnostics
Analysis Complete

Need help troubleshooting?

Let our intelligent diagnosis agent analyze the error log, trace the root cause, and provide a one-click automated fix.

AI Agent is analyzing...

Checking traceback patterns and preparing automated solutions.

تحليل الخطأ

{{ aiDiagnosisResult.explanation }}

السبب الجذري

{{ aiDiagnosisResult.root_cause }}

خطوات الحل اليدوي
  • {{ step }}

Delete Application

Are you sure you want to delete {{ appToDelete?.name }} from the global repository? This action cannot be undone.

Delete System Tag

Are you sure you want to delete the tag {{ tagToDelete?.name }}? This will remove it from all items permanently.

Manual Restoration

Are you sure you want to restore {{ siteToActOn?.domain }}? This will overwrite the current database with the uploaded file.

Restore

Restore your site using a previous backup.

This will overwrite all data & apps in your site with those from the backup

Database Backup

Upload the database backup file. Usually file name ends in .sql.gz or .sql

{{ manualRestoreFileNames.db }}

Public Files

Upload the public files backup. Usually file name ends in -files.tar

{{ manualRestoreFileNames.public }}

Private Files

Upload the private files backup. Usually file name ends in -private-files.tar

{{ manualRestoreFileNames.private }}

Site Config (required if backup is encrypted)

Upload the site config file. Usually file name ends in -site_config_backup.json

{{ manualRestoreFileNames.config }}

Create IAM User

Create a new user credential for dashboard access.

{{ createUserError }}

Reset User Password

Change password for user {{ selectedUser?.username }}.

{{ resetUserPasswordError }}

Add User to Group

Assign {{ selectedUser?.username }} to an IAM Group.

User is already in all available groups.

Attach Policy to User

Attach an IAM Policy directly to user {{ selectedUser?.username }}.

All policies are already attached to this user.

Create IAM Group

Create a group to consolidate permissions.

{{ createGroupError }}

Attach Policy to Group

Attach an IAM Policy to group {{ selectedGroup?.name }}.

All policies are already attached to this group.

Create IAM Policy

Create a custom AWS-like JSON authorization document.

{{ createPolicyError }}

View IAM Policy Document

JSON definitions for {{ selectedPolicy?.name }}.

{{ formatPolicyDoc(selectedPolicy?.document) }}
{{ toastMessage }}