Copy disabled (too large)
Download .txt
Showing preview only (15,487K chars total). Download the full file to get everything.
Repository: 1Panel-dev/1Panel
Branch: dev-v2
Commit: b05ed1a0ca2a
Files: 1456
Total size: 14.5 MB
Directory structure:
gitextract_ro__1khy/
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── 1_bug_report.yml
│ │ ├── 2_feature_request.yml
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── add-labels-for-pr.yml
│ ├── build-and-publish.yml
│ ├── issue-translator.yml
│ ├── llm-code-review.yml
│ ├── sonarcloud-scan.yml
│ ├── sync2gitee.yml
│ └── tyops-check.yml
├── .gitignore
├── .goreleaser.yaml
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── OWNERS
├── README.md
├── SECURITY.md
├── agent/
│ ├── app/
│ │ ├── api/
│ │ │ └── v2/
│ │ │ ├── agents.go
│ │ │ ├── ai.go
│ │ │ ├── alert.go
│ │ │ ├── app.go
│ │ │ ├── app_ignore_upgrade.go
│ │ │ ├── app_install.go
│ │ │ ├── backup.go
│ │ │ ├── clam.go
│ │ │ ├── compose_template.go
│ │ │ ├── container.go
│ │ │ ├── cronjob.go
│ │ │ ├── dashboard.go
│ │ │ ├── database.go
│ │ │ ├── database_common.go
│ │ │ ├── database_mysql.go
│ │ │ ├── database_postgresql.go
│ │ │ ├── database_redis.go
│ │ │ ├── device.go
│ │ │ ├── disk.go
│ │ │ ├── docker.go
│ │ │ ├── entry.go
│ │ │ ├── fail2ban.go
│ │ │ ├── favorite.go
│ │ │ ├── file.go
│ │ │ ├── firewall.go
│ │ │ ├── ftp.go
│ │ │ ├── group.go
│ │ │ ├── health.go
│ │ │ ├── helper/
│ │ │ │ └── helper.go
│ │ │ ├── host.go
│ │ │ ├── host_tool.go
│ │ │ ├── image.go
│ │ │ ├── image_repo.go
│ │ │ ├── logs.go
│ │ │ ├── mcp_server.go
│ │ │ ├── monitor.go
│ │ │ ├── nginx.go
│ │ │ ├── php_extensions.go
│ │ │ ├── process.go
│ │ │ ├── recycle_bin.go
│ │ │ ├── runtime.go
│ │ │ ├── setting.go
│ │ │ ├── snapshot.go
│ │ │ ├── ssh.go
│ │ │ ├── system.go
│ │ │ ├── task.go
│ │ │ ├── tensorrt_llm.go
│ │ │ ├── terminal.go
│ │ │ ├── website.go
│ │ │ ├── website_acme_account.go
│ │ │ ├── website_ca.go
│ │ │ ├── website_dns_account.go
│ │ │ ├── website_domain.go
│ │ │ └── website_ssl.go
│ │ ├── dto/
│ │ │ ├── agents.go
│ │ │ ├── ai.go
│ │ │ ├── alert.go
│ │ │ ├── app.go
│ │ │ ├── backup.go
│ │ │ ├── clam.go
│ │ │ ├── command.go
│ │ │ ├── common_req.go
│ │ │ ├── common_res.go
│ │ │ ├── compose_template.go
│ │ │ ├── container.go
│ │ │ ├── cronjob.go
│ │ │ ├── dashboard.go
│ │ │ ├── database.go
│ │ │ ├── database_postgresql.go
│ │ │ ├── device.go
│ │ │ ├── disk.go
│ │ │ ├── docker.go
│ │ │ ├── fail2ban.go
│ │ │ ├── file.go
│ │ │ ├── firewall.go
│ │ │ ├── ftp.go
│ │ │ ├── group.go
│ │ │ ├── host.go
│ │ │ ├── image.go
│ │ │ ├── image_repo.go
│ │ │ ├── logs.go
│ │ │ ├── monitor.go
│ │ │ ├── nginx.go
│ │ │ ├── request/
│ │ │ │ ├── app.go
│ │ │ │ ├── app_ignore_upgrade.go
│ │ │ │ ├── common.go
│ │ │ │ ├── disk.go
│ │ │ │ ├── favorite.go
│ │ │ │ ├── file.go
│ │ │ │ ├── host_tool.go
│ │ │ │ ├── mcp_server.go
│ │ │ │ ├── nginx.go
│ │ │ │ ├── php_extensions.go
│ │ │ │ ├── process.go
│ │ │ │ ├── recycle_bin.go
│ │ │ │ ├── runtime.go
│ │ │ │ ├── task.go
│ │ │ │ ├── tensorrt_llm.go
│ │ │ │ ├── website.go
│ │ │ │ └── website_ssl.go
│ │ │ ├── response/
│ │ │ │ ├── app.go
│ │ │ │ ├── app_ignore_upgrade.go
│ │ │ │ ├── disk.go
│ │ │ │ ├── favorite.go
│ │ │ │ ├── file.go
│ │ │ │ ├── host_tool.go
│ │ │ │ ├── mcp_server.go
│ │ │ │ ├── nginx.go
│ │ │ │ ├── php_extensions.go
│ │ │ │ ├── recycle_bin.go
│ │ │ │ ├── runtime.go
│ │ │ │ ├── system.go
│ │ │ │ ├── task.go
│ │ │ │ ├── tensorrt_llm.go
│ │ │ │ ├── website.go
│ │ │ │ └── website_ssl.go
│ │ │ ├── setting.go
│ │ │ ├── snapshot.go
│ │ │ └── ssh.go
│ │ ├── model/
│ │ │ ├── agent.go
│ │ │ ├── agent_account.go
│ │ │ ├── agent_account_model.go
│ │ │ ├── ai.go
│ │ │ ├── alert.go
│ │ │ ├── app.go
│ │ │ ├── app_detail.go
│ │ │ ├── app_ignore_upgrade.go
│ │ │ ├── app_install.go
│ │ │ ├── app_install_resource.go
│ │ │ ├── app_launcher.go
│ │ │ ├── app_tag.go
│ │ │ ├── backup.go
│ │ │ ├── base.go
│ │ │ ├── clam.go
│ │ │ ├── compose_template.go
│ │ │ ├── cronjob.go
│ │ │ ├── database.go
│ │ │ ├── database_mysql.go
│ │ │ ├── database_postgresql.go
│ │ │ ├── favorite.go
│ │ │ ├── firewall.go
│ │ │ ├── ftp.go
│ │ │ ├── group.go
│ │ │ ├── host.go
│ │ │ ├── image_repo.go
│ │ │ ├── mcp_server.go
│ │ │ ├── monitor.go
│ │ │ ├── php_extensions.go
│ │ │ ├── runtime.go
│ │ │ ├── setting.go
│ │ │ ├── snapshot.go
│ │ │ ├── ssh.go
│ │ │ ├── tag.go
│ │ │ ├── task.go
│ │ │ ├── tensorrt_llm.go
│ │ │ ├── website.go
│ │ │ ├── website_acme_account.go
│ │ │ ├── website_ca.go
│ │ │ ├── website_dns_account.go
│ │ │ ├── website_domain.go
│ │ │ └── website_ssl.go
│ │ ├── provider/
│ │ │ ├── catalog.go
│ │ │ ├── openclaw.go
│ │ │ └── verify.go
│ │ ├── repo/
│ │ │ ├── agent.go
│ │ │ ├── agent_account.go
│ │ │ ├── agent_account_model.go
│ │ │ ├── ai.go
│ │ │ ├── alert.go
│ │ │ ├── app.go
│ │ │ ├── app_detail.go
│ │ │ ├── app_ignore_upgrade.go
│ │ │ ├── app_install.go
│ │ │ ├── app_install_resource.go
│ │ │ ├── app_launcher.go
│ │ │ ├── app_tag.go
│ │ │ ├── backup.go
│ │ │ ├── clam.go
│ │ │ ├── common.go
│ │ │ ├── compose_template.go
│ │ │ ├── cronjob.go
│ │ │ ├── database.go
│ │ │ ├── database_mysql.go
│ │ │ ├── database_postgresql.go
│ │ │ ├── favorite.go
│ │ │ ├── ftp.go
│ │ │ ├── group.go
│ │ │ ├── host.go
│ │ │ ├── image_repo.go
│ │ │ ├── mcp_server.go
│ │ │ ├── monitor.go
│ │ │ ├── php_extensions.go
│ │ │ ├── runtime.go
│ │ │ ├── script.go
│ │ │ ├── setting.go
│ │ │ ├── snapshot.go
│ │ │ ├── tag.go
│ │ │ ├── task.go
│ │ │ ├── tensorrt_llm.go
│ │ │ ├── website.go
│ │ │ ├── website_acme_account.go
│ │ │ ├── website_ca.go
│ │ │ ├── website_dns_account.go
│ │ │ ├── website_domain.go
│ │ │ └── website_ssl.go
│ │ ├── service/
│ │ │ ├── agents.go
│ │ │ ├── agents_utils.go
│ │ │ ├── ai.go
│ │ │ ├── alert.go
│ │ │ ├── alert_helper.go
│ │ │ ├── alert_sender.go
│ │ │ ├── app.go
│ │ │ ├── app_ingore_upgrade.go
│ │ │ ├── app_install.go
│ │ │ ├── app_sync_task.go
│ │ │ ├── app_utils.go
│ │ │ ├── backup.go
│ │ │ ├── backup_app.go
│ │ │ ├── backup_compose.go
│ │ │ ├── backup_container.go
│ │ │ ├── backup_mysql.go
│ │ │ ├── backup_postgresql.go
│ │ │ ├── backup_record.go
│ │ │ ├── backup_redis.go
│ │ │ ├── backup_runtime.go
│ │ │ ├── backup_website.go
│ │ │ ├── clam.go
│ │ │ ├── compose_template.go
│ │ │ ├── container.go
│ │ │ ├── container_compose.go
│ │ │ ├── container_network.go
│ │ │ ├── container_volume.go
│ │ │ ├── cronjob.go
│ │ │ ├── cronjob_backup.go
│ │ │ ├── cronjob_helper.go
│ │ │ ├── dashboard.go
│ │ │ ├── database.go
│ │ │ ├── database_common.go
│ │ │ ├── database_mysql.go
│ │ │ ├── database_postgresql.go
│ │ │ ├── database_redis.go
│ │ │ ├── device.go
│ │ │ ├── device_clean.go
│ │ │ ├── disk.go
│ │ │ ├── disk_utils.go
│ │ │ ├── docker.go
│ │ │ ├── entry.go
│ │ │ ├── fail2ban.go
│ │ │ ├── favorite.go
│ │ │ ├── file.go
│ │ │ ├── firewall.go
│ │ │ ├── ftp.go
│ │ │ ├── group.go
│ │ │ ├── helper.go
│ │ │ ├── host.go
│ │ │ ├── host_tool.go
│ │ │ ├── image.go
│ │ │ ├── image_repo.go
│ │ │ ├── iptables.go
│ │ │ ├── logs.go
│ │ │ ├── mcp_server.go
│ │ │ ├── monitor.go
│ │ │ ├── nginx.go
│ │ │ ├── nginx_utils.go
│ │ │ ├── php_extensions.go
│ │ │ ├── process.go
│ │ │ ├── recycle_bin.go
│ │ │ ├── runtime.go
│ │ │ ├── runtime_utils.go
│ │ │ ├── setting.go
│ │ │ ├── snapshot.go
│ │ │ ├── snapshot_create.go
│ │ │ ├── snapshot_recover.go
│ │ │ ├── snapshot_rollback.go
│ │ │ ├── ssh.go
│ │ │ ├── system.go
│ │ │ ├── task.go
│ │ │ ├── tensorrt_llm.go
│ │ │ ├── website.go
│ │ │ ├── website_acme_account.go
│ │ │ ├── website_auth_basic.go
│ │ │ ├── website_ca.go
│ │ │ ├── website_dns_account.go
│ │ │ ├── website_domain.go
│ │ │ ├── website_lb.go
│ │ │ ├── website_op.go
│ │ │ ├── website_proxy.go
│ │ │ ├── website_rewrite.go
│ │ │ ├── website_ssl.go
│ │ │ └── website_utils.go
│ │ └── task/
│ │ └── task.go
│ ├── buserr/
│ │ ├── errors.go
│ │ └── multi_err.go
│ ├── cmd/
│ │ └── server/
│ │ ├── ai/
│ │ │ ├── ai.go
│ │ │ ├── compose.yml
│ │ │ └── llm-compose.yml
│ │ ├── cmd/
│ │ │ └── root.go
│ │ ├── conf/
│ │ │ ├── app.yaml
│ │ │ └── conf.go
│ │ ├── docs/
│ │ │ ├── swagger.go
│ │ │ └── x-log.json
│ │ ├── main.go
│ │ └── nginx_conf/
│ │ ├── 404.html
│ │ ├── cache.conf
│ │ ├── domain404.html
│ │ ├── gzip.conf
│ │ ├── index.html
│ │ ├── index.php
│ │ ├── nginx_conf.go
│ │ ├── path_auth.conf
│ │ ├── php-fpm.conf
│ │ ├── php_extensions.json
│ │ ├── proxy.conf
│ │ ├── proxy_cache.conf
│ │ ├── proxy_no_cache.conf
│ │ ├── rewrite/
│ │ │ ├── crmeb.conf
│ │ │ ├── dabr.conf
│ │ │ ├── dbshop.conf
│ │ │ ├── dedecms.conf
│ │ │ ├── default.conf
│ │ │ ├── discuz.conf
│ │ │ ├── discuzx.conf
│ │ │ ├── discuzx2.conf
│ │ │ ├── discuzx3.conf
│ │ │ ├── drupal.conf
│ │ │ ├── ecshop.conf
│ │ │ ├── edusoho.conf
│ │ │ ├── emlog.conf
│ │ │ ├── empirecms.conf
│ │ │ ├── laravel5.conf
│ │ │ ├── maccms.conf
│ │ │ ├── mvc.conf
│ │ │ ├── niushop.conf
│ │ │ ├── phpcms.conf
│ │ │ ├── phpwind.conf
│ │ │ ├── sablog.conf
│ │ │ ├── seacms.conf
│ │ │ ├── shopex.conf
│ │ │ ├── shopwind.conf
│ │ │ ├── thinkphp.conf
│ │ │ ├── typecho.conf
│ │ │ ├── typecho2.conf
│ │ │ ├── wordpress.conf
│ │ │ ├── wp2.conf
│ │ │ ├── yii2.conf
│ │ │ └── zblog.conf
│ │ ├── root_ssl.conf
│ │ ├── sse.conf
│ │ ├── ssl.conf
│ │ ├── stop.html
│ │ ├── stream_default.conf
│ │ ├── upstream.conf
│ │ └── website_default.conf
│ ├── constant/
│ │ ├── alert.go
│ │ ├── app.go
│ │ ├── backup.go
│ │ ├── common.go
│ │ ├── container.go
│ │ ├── host_tool.go
│ │ ├── nginx.go
│ │ ├── runtime.go
│ │ ├── status.go
│ │ ├── task.go
│ │ └── website.go
│ ├── cron/
│ │ ├── cron.go
│ │ └── job/
│ │ ├── app.go
│ │ ├── backup.go
│ │ ├── ssl.go
│ │ └── website.go
│ ├── global/
│ │ ├── config.go
│ │ └── global.go
│ ├── go.mod
│ ├── go.sum
│ ├── i18n/
│ │ ├── i18n.go
│ │ └── lang/
│ │ ├── en.yaml
│ │ ├── es-ES.yaml
│ │ ├── ja.yaml
│ │ ├── ko.yaml
│ │ ├── ms.yaml
│ │ ├── pt-BR.yaml
│ │ ├── ru.yaml
│ │ ├── tr.yaml
│ │ ├── zh-Hant.yaml
│ │ └── zh.yaml
│ ├── init/
│ │ ├── app/
│ │ │ └── app.go
│ │ ├── business/
│ │ │ └── business.go
│ │ ├── cache/
│ │ │ ├── cache.go
│ │ │ └── db/
│ │ │ └── db.go
│ │ ├── db/
│ │ │ └── db.go
│ │ ├── dir/
│ │ │ └── dir.go
│ │ ├── firewall/
│ │ │ └── firewall.go
│ │ ├── hook/
│ │ │ └── hook.go
│ │ ├── lang/
│ │ │ └── lang.go
│ │ ├── log/
│ │ │ └── log.go
│ │ ├── migration/
│ │ │ ├── migrate.go
│ │ │ └── migrations/
│ │ │ ├── init.go
│ │ │ └── utils/
│ │ │ ├── agent_account_model_pool.go
│ │ │ ├── openclaw_agent.go
│ │ │ └── openclaw_caddyfile.go
│ │ ├── router/
│ │ │ └── router.go
│ │ ├── validator/
│ │ │ └── validator.go
│ │ └── viper/
│ │ └── viper.go
│ ├── log/
│ │ ├── config.go
│ │ ├── dup_write_darwin.go
│ │ ├── dup_write_linux.go
│ │ ├── dup_write_windows.go
│ │ ├── manager.go
│ │ └── writer.go
│ ├── middleware/
│ │ ├── certificate.go
│ │ └── operation.go
│ ├── router/
│ │ ├── backup.go
│ │ ├── common.go
│ │ ├── entry.go
│ │ ├── ro_ai.go
│ │ ├── ro_alert.go
│ │ ├── ro_app.go
│ │ ├── ro_container.go
│ │ ├── ro_cronjob.go
│ │ ├── ro_dashboard.go
│ │ ├── ro_database.go
│ │ ├── ro_file.go
│ │ ├── ro_group.go
│ │ ├── ro_host.go
│ │ ├── ro_log.go
│ │ ├── ro_nginx.go
│ │ ├── ro_process.go
│ │ ├── ro_router.go
│ │ ├── ro_runtime.go
│ │ ├── ro_setting.go
│ │ ├── ro_toolbox.go
│ │ ├── ro_website.go
│ │ ├── ro_website_acme_account.go
│ │ ├── ro_website_ca.go
│ │ ├── ro_website_dns_account.go
│ │ └── ro_website_ssl.go
│ ├── server/
│ │ ├── init.go
│ │ └── server.go
│ └── utils/
│ ├── ai_tools/
│ │ ├── gpu/
│ │ │ ├── common/
│ │ │ │ └── gpu_info.go
│ │ │ ├── gpu.go
│ │ │ └── schema/
│ │ │ ├── parser.go
│ │ │ └── types.go
│ │ └── xpu/
│ │ ├── types.go
│ │ ├── xpu.go
│ │ └── xpu_info.go
│ ├── alert/
│ │ └── alert.go
│ ├── alert_push/
│ │ └── alert_push.go
│ ├── appicon/
│ │ └── appicon.go
│ ├── clam/
│ │ └── clam.go
│ ├── cloud_storage/
│ │ ├── client/
│ │ │ ├── ali.go
│ │ │ ├── cos.go
│ │ │ ├── google_drive.go
│ │ │ ├── helper/
│ │ │ │ └── webdav/
│ │ │ │ ├── auth.go
│ │ │ │ ├── auth_basic.go
│ │ │ │ ├── auth_digest.go
│ │ │ │ ├── auth_passport.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── file.go
│ │ │ │ ├── reques.go
│ │ │ │ ├── utils.go
│ │ │ │ └── webdav.go
│ │ │ ├── helper.go
│ │ │ ├── kodo.go
│ │ │ ├── local.go
│ │ │ ├── minio.go
│ │ │ ├── onedrive.go
│ │ │ ├── oss.go
│ │ │ ├── s3.go
│ │ │ ├── sftp.go
│ │ │ ├── up.go
│ │ │ └── webdav.go
│ │ └── cloud_storage_client.go
│ ├── cmd/
│ │ ├── cmd.go
│ │ └── cmdx.go
│ ├── common/
│ │ ├── common.go
│ │ └── sqlite.go
│ ├── compose/
│ │ └── compose.go
│ ├── controller/
│ │ ├── controller.go
│ │ └── manager/
│ │ ├── common.go
│ │ ├── openrc.go
│ │ ├── snap.go
│ │ ├── systemd.go
│ │ └── sysvinit.go
│ ├── convert/
│ │ └── convert.go
│ ├── copier/
│ │ └── copier.go
│ ├── csv_export/
│ │ └── ssh_log.go
│ ├── docker/
│ │ ├── compose.go
│ │ └── docker.go
│ ├── email/
│ │ └── smtp_sender.go
│ ├── encrypt/
│ │ └── encrypt.go
│ ├── env/
│ │ └── env.go
│ ├── files/
│ │ ├── archiver.go
│ │ ├── file_op.go
│ │ ├── fileinfo.go
│ │ ├── rar.go
│ │ ├── tar.go
│ │ ├── tar_gz.go
│ │ ├── utils.go
│ │ ├── x7z.go
│ │ └── zip.go
│ ├── firewall/
│ │ ├── client/
│ │ │ ├── firewalld.go
│ │ │ ├── info.go
│ │ │ ├── iptables/
│ │ │ │ ├── common.go
│ │ │ │ ├── filter.go
│ │ │ │ ├── forward.go
│ │ │ │ └── persistence.go
│ │ │ ├── iptables.go
│ │ │ └── ufw.go
│ │ └── client.go
│ ├── geo/
│ │ └── geo.go
│ ├── ini_conf/
│ │ └── ini.go
│ ├── mysql/
│ │ ├── client/
│ │ │ ├── info.go
│ │ │ ├── local.go
│ │ │ └── remote.go
│ │ └── client.go
│ ├── nginx/
│ │ ├── components/
│ │ │ ├── block.go
│ │ │ ├── comment.go
│ │ │ ├── config.go
│ │ │ ├── directive.go
│ │ │ ├── http.go
│ │ │ ├── location.go
│ │ │ ├── lua_block.go
│ │ │ ├── server.go
│ │ │ ├── server_listen.go
│ │ │ ├── statement.go
│ │ │ ├── upstream.go
│ │ │ └── upstream_server.go
│ │ ├── dumper.go
│ │ └── parser/
│ │ ├── flag/
│ │ │ └── flag.go
│ │ ├── lexer.go
│ │ └── parser.go
│ ├── ntp/
│ │ └── ntp.go
│ ├── openclaw/
│ │ └── caddyfile.go
│ ├── postgresql/
│ │ ├── client/
│ │ │ ├── info.go
│ │ │ ├── local.go
│ │ │ └── remote.go
│ │ └── client.go
│ ├── psutil/
│ │ ├── cpu.go
│ │ ├── disk.go
│ │ ├── global.go
│ │ └── host.go
│ ├── re/
│ │ └── re.go
│ ├── redis/
│ │ └── redis.go
│ ├── req_helper/
│ │ ├── core.go
│ │ └── request.go
│ ├── ssh/
│ │ └── ssh.go
│ ├── ssl/
│ │ ├── acme.go
│ │ ├── client.go
│ │ ├── dns_provider.go
│ │ └── manual_client.go
│ ├── terminal/
│ │ ├── ai/
│ │ │ ├── client.go
│ │ │ ├── command_generator.go
│ │ │ ├── config_runtime.go
│ │ │ └── validate.go
│ │ ├── ai_interceptor.go
│ │ ├── local_cmd.go
│ │ ├── ws_local_session.go
│ │ └── ws_session.go
│ ├── toolbox/
│ │ ├── fail2ban.go
│ │ ├── helper/
│ │ │ └── sha512_crypt.go
│ │ └── pure-ftpd.go
│ ├── version/
│ │ └── version.go
│ ├── websocket/
│ │ ├── client.go
│ │ └── process_data.go
│ └── xpack/
│ └── community.go
├── ci/
│ └── script.sh
├── core/
│ ├── app/
│ │ ├── api/
│ │ │ └── v2/
│ │ │ ├── auth.go
│ │ │ ├── backup.go
│ │ │ ├── command.go
│ │ │ ├── entry.go
│ │ │ ├── group.go
│ │ │ ├── helper/
│ │ │ │ └── helper.go
│ │ │ ├── logs.go
│ │ │ ├── script_library.go
│ │ │ ├── setting.go
│ │ │ └── upgrade.go
│ │ ├── dto/
│ │ │ ├── auth.go
│ │ │ ├── backup.go
│ │ │ ├── command.go
│ │ │ ├── common.go
│ │ │ ├── group.go
│ │ │ ├── logs.go
│ │ │ ├── script_library.go
│ │ │ └── setting.go
│ │ ├── model/
│ │ │ ├── agent.go
│ │ │ ├── alert.go
│ │ │ ├── backup.go
│ │ │ ├── base.go
│ │ │ ├── command.go
│ │ │ ├── group.go
│ │ │ ├── logs.go
│ │ │ ├── script_library.go
│ │ │ ├── setting.go
│ │ │ ├── task.go
│ │ │ └── upgrade_log.go
│ │ ├── repo/
│ │ │ ├── agent.go
│ │ │ ├── backup.go
│ │ │ ├── command.go
│ │ │ ├── common.go
│ │ │ ├── group.go
│ │ │ ├── logs.go
│ │ │ ├── script_library.go
│ │ │ ├── setting.go
│ │ │ ├── task.go
│ │ │ └── upgrade_log.go
│ │ ├── service/
│ │ │ ├── auth.go
│ │ │ ├── backup.go
│ │ │ ├── command.go
│ │ │ ├── entry.go
│ │ │ ├── group.go
│ │ │ ├── logs.go
│ │ │ ├── script_library.go
│ │ │ ├── setting.go
│ │ │ └── upgrade.go
│ │ └── task/
│ │ └── task.go
│ ├── buserr/
│ │ ├── errors.go
│ │ └── multi_err.go
│ ├── cmd/
│ │ └── server/
│ │ ├── app/
│ │ │ ├── app_config.go
│ │ │ ├── app_config.yml
│ │ │ └── app_param.yml
│ │ ├── cmd/
│ │ │ ├── app.go
│ │ │ ├── listen-ip.go
│ │ │ ├── reset.go
│ │ │ ├── restore.go
│ │ │ ├── root.go
│ │ │ ├── update.go
│ │ │ ├── user-info.go
│ │ │ └── version.go
│ │ ├── conf/
│ │ │ ├── app.yaml
│ │ │ └── conf.go
│ │ ├── docs/
│ │ │ ├── docs.go
│ │ │ ├── swagger.go
│ │ │ ├── swagger.json
│ │ │ ├── swagger_test.go
│ │ │ └── x-log.json
│ │ ├── main.go
│ │ ├── res/
│ │ │ ├── error_msg.go
│ │ │ └── html/
│ │ │ ├── 200.html
│ │ │ ├── 200_err_domain.html
│ │ │ ├── 200_err_ip_limit.html
│ │ │ ├── 400.html
│ │ │ ├── 401.html
│ │ │ ├── 403.html
│ │ │ ├── 404.html
│ │ │ ├── 408.html
│ │ │ ├── 416.html
│ │ │ └── 500.html
│ │ └── web/
│ │ ├── static/
│ │ │ ├── china.json
│ │ │ └── world.json
│ │ └── web.go
│ ├── constant/
│ │ ├── alert.go
│ │ ├── common.go
│ │ ├── session.go
│ │ └── status.go
│ ├── deps/
│ │ └── keepdeps.go
│ ├── global/
│ │ ├── config.go
│ │ └── global.go
│ ├── go.mod
│ ├── go.sum
│ ├── i18n/
│ │ ├── i18n.go
│ │ └── lang/
│ │ ├── en.yaml
│ │ ├── es-ES.yaml
│ │ ├── ja.yaml
│ │ ├── ko.yaml
│ │ ├── ms.yaml
│ │ ├── pt-BR.yaml
│ │ ├── ru.yaml
│ │ ├── tr.yaml
│ │ ├── zh-Hant.yaml
│ │ └── zh.yaml
│ ├── init/
│ │ ├── auth/
│ │ │ └── ip_tracker.go
│ │ ├── cron/
│ │ │ ├── cron.go
│ │ │ └── job/
│ │ │ └── backup.go
│ │ ├── db/
│ │ │ └── db.go
│ │ ├── geo/
│ │ │ └── lang.go
│ │ ├── hook/
│ │ │ └── hook.go
│ │ ├── log/
│ │ │ └── log.go
│ │ ├── migration/
│ │ │ ├── helper/
│ │ │ │ └── menu.go
│ │ │ ├── migrate.go
│ │ │ └── migrations/
│ │ │ └── init.go
│ │ ├── proxy/
│ │ │ └── proxy.go
│ │ ├── router/
│ │ │ ├── proxy.go
│ │ │ └── router.go
│ │ ├── run/
│ │ │ └── run.go
│ │ ├── session/
│ │ │ ├── psession/
│ │ │ │ └── psession.go
│ │ │ └── session.go
│ │ ├── swagger/
│ │ │ └── swag.go
│ │ ├── validator/
│ │ │ └── validator.go
│ │ └── viper/
│ │ └── viper.go
│ ├── log/
│ │ ├── config.go
│ │ ├── dup_write_darwin.go
│ │ ├── dup_write_linux.go
│ │ ├── dup_write_windows.go
│ │ ├── manager.go
│ │ └── writer.go
│ ├── middleware/
│ │ ├── api_auth.go
│ │ ├── bind_domain.go
│ │ ├── demo_handle.go
│ │ ├── helper.go
│ │ ├── ip_limit.go
│ │ ├── loading.go
│ │ ├── operation.go
│ │ ├── password_expired.go
│ │ ├── password_rsa.go
│ │ └── session.go
│ ├── router/
│ │ ├── command.go
│ │ ├── common.go
│ │ ├── entry.go
│ │ ├── ro_backup.go
│ │ ├── ro_base.go
│ │ ├── ro_group.go
│ │ ├── ro_log.go
│ │ ├── ro_router.go
│ │ ├── ro_script_library.go
│ │ └── ro_setting.go
│ ├── server/
│ │ ├── init.go
│ │ └── server.go
│ └── utils/
│ ├── captcha/
│ │ └── captcha.go
│ ├── cloud_storage/
│ │ └── refresh_token.go
│ ├── cmd/
│ │ ├── cmd.go
│ │ └── cmdx.go
│ ├── common/
│ │ ├── common.go
│ │ └── sqlite.go
│ ├── controller/
│ │ ├── controller.go
│ │ └── manager/
│ │ ├── common.go
│ │ ├── openrc.go
│ │ ├── snap.go
│ │ ├── systemd.go
│ │ └── sysvinit.go
│ ├── copier/
│ │ └── copier.go
│ ├── csv/
│ │ └── command.go
│ ├── encrypt/
│ │ └── encrypt.go
│ ├── files/
│ │ └── files.go
│ ├── firewall/
│ │ └── firewall.go
│ ├── geo/
│ │ └── geo.go
│ ├── mfa/
│ │ └── mfa.go
│ ├── passkey/
│ │ ├── passkey_record.go
│ │ ├── passkey_store.go
│ │ └── passkey_user.go
│ ├── re/
│ │ └── re.go
│ ├── req_helper/
│ │ ├── proxy_local/
│ │ │ └── req_to_local.go
│ │ └── requset.go
│ ├── security/
│ │ └── security.go
│ ├── ssh/
│ │ ├── http.go
│ │ └── ssh.go
│ ├── terminal/
│ │ ├── local_cmd.go
│ │ ├── ws_local_session.go
│ │ └── ws_session.go
│ └── xpack/
│ └── community.go
├── docs/
│ ├── README.ar.md
│ ├── README.de.md
│ ├── README.es-es.md
│ ├── README.fr.md
│ ├── README.id.md
│ ├── README.ja.md
│ ├── README.ko.md
│ ├── README.ms.md
│ ├── README.pt-br.md
│ ├── README.ru.md
│ ├── README.tr.md
│ ├── README.zh-Hans.md
│ └── README.zh-Hant.md
├── frontend/
│ ├── .editorconfig
│ ├── .eslintignore
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── .prettierignore
│ ├── .prettierrc.js
│ ├── index.html
│ ├── lint-staged.config.js
│ ├── package.json
│ ├── postcss.config.cjs
│ ├── src/
│ │ ├── App.vue
│ │ ├── api/
│ │ │ ├── config/
│ │ │ │ └── service-port.ts
│ │ │ ├── helper/
│ │ │ │ ├── axios-cancel.ts
│ │ │ │ └── check-status.ts
│ │ │ ├── index.ts
│ │ │ ├── interface/
│ │ │ │ ├── ai.ts
│ │ │ │ ├── alert.ts
│ │ │ │ ├── app.ts
│ │ │ │ ├── auth.ts
│ │ │ │ ├── backup.ts
│ │ │ │ ├── command.ts
│ │ │ │ ├── container.ts
│ │ │ │ ├── cronjob.ts
│ │ │ │ ├── dashboard.ts
│ │ │ │ ├── database.ts
│ │ │ │ ├── file.ts
│ │ │ │ ├── group.ts
│ │ │ │ ├── host-tool.ts
│ │ │ │ ├── host.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── log.ts
│ │ │ │ ├── nginx.ts
│ │ │ │ ├── process.ts
│ │ │ │ ├── runtime.ts
│ │ │ │ ├── setting.ts
│ │ │ │ ├── terminal.ts
│ │ │ │ ├── toolbox.ts
│ │ │ │ └── website.ts
│ │ │ └── modules/
│ │ │ ├── ai.ts
│ │ │ ├── alert.ts
│ │ │ ├── app.ts
│ │ │ ├── auth.ts
│ │ │ ├── backup.ts
│ │ │ ├── command.ts
│ │ │ ├── container.ts
│ │ │ ├── cronjob.ts
│ │ │ ├── dashboard.ts
│ │ │ ├── database.ts
│ │ │ ├── files.ts
│ │ │ ├── group.ts
│ │ │ ├── host-tool.ts
│ │ │ ├── host.ts
│ │ │ ├── log.ts
│ │ │ ├── nginx.ts
│ │ │ ├── process.ts
│ │ │ ├── runtime.ts
│ │ │ ├── setting.ts
│ │ │ ├── terminal.ts
│ │ │ ├── toolbox.ts
│ │ │ └── website.ts
│ │ ├── assets/
│ │ │ ├── iconfont/
│ │ │ │ ├── iconfont.css
│ │ │ │ ├── iconfont.js
│ │ │ │ └── iconfont.json
│ │ │ └── json/
│ │ │ └── iso.json
│ │ ├── components/
│ │ │ ├── advanced-setting/
│ │ │ │ └── index.vue
│ │ │ ├── agent-group/
│ │ │ │ ├── change.vue
│ │ │ │ └── index.vue
│ │ │ ├── app-status/
│ │ │ │ └── index.vue
│ │ │ ├── back-button/
│ │ │ │ └── index.vue
│ │ │ ├── backup/
│ │ │ │ └── index.vue
│ │ │ ├── card-with-header/
│ │ │ │ └── index.vue
│ │ │ ├── codemirror-pro/
│ │ │ │ ├── drawer.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── nginx.ts
│ │ │ ├── complex-table/
│ │ │ │ └── index.vue
│ │ │ ├── config-card/
│ │ │ │ └── index.vue
│ │ │ ├── confirm-dialog/
│ │ │ │ └── index.vue
│ │ │ ├── copy-button/
│ │ │ │ └── index.vue
│ │ │ ├── del-dialog/
│ │ │ │ └── index.vue
│ │ │ ├── detail-show/
│ │ │ │ └── index.vue
│ │ │ ├── dialog-pro/
│ │ │ │ └── index.vue
│ │ │ ├── docker-proxy/
│ │ │ │ ├── dialog.vue
│ │ │ │ ├── docker-restart.vue
│ │ │ │ └── index.vue
│ │ │ ├── drawer-pro/
│ │ │ │ └── index.vue
│ │ │ ├── error-message/
│ │ │ │ ├── 404.vue
│ │ │ │ ├── err_domain.vue
│ │ │ │ ├── err_ip.vue
│ │ │ │ ├── error_code.vue
│ │ │ │ └── unsafe.vue
│ │ │ ├── error-prompt/
│ │ │ │ └── index.vue
│ │ │ ├── exist-file/
│ │ │ │ └── index.vue
│ │ │ ├── file-list/
│ │ │ │ └── index.vue
│ │ │ ├── file-role/
│ │ │ │ └── index.vue
│ │ │ ├── group/
│ │ │ │ └── index.vue
│ │ │ ├── index.ts
│ │ │ ├── input-tag/
│ │ │ │ └── index.vue
│ │ │ ├── layout-col/
│ │ │ │ └── form.vue
│ │ │ ├── layout-content/
│ │ │ │ ├── form-button.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── no-such-service.vue
│ │ │ ├── license-import/
│ │ │ │ └── index.vue
│ │ │ ├── log/
│ │ │ │ ├── compose/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── container/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── container-drawer/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── custom-hightlight/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── file/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── file-drawer/
│ │ │ │ │ └── index.vue
│ │ │ │ └── task/
│ │ │ │ ├── index.vue
│ │ │ │ └── log-without-dialog.vue
│ │ │ ├── main-div/
│ │ │ │ └── index.vue
│ │ │ ├── mkdown-editor/
│ │ │ │ └── index.vue
│ │ │ ├── msg-info/
│ │ │ │ └── index.vue
│ │ │ ├── node-select/
│ │ │ │ └── index.vue
│ │ │ ├── port-jump/
│ │ │ │ └── index.vue
│ │ │ ├── router-button/
│ │ │ │ └── index.vue
│ │ │ ├── status/
│ │ │ │ └── index.vue
│ │ │ ├── svg-icon/
│ │ │ │ └── svg-icon.vue
│ │ │ ├── system-upgrade/
│ │ │ │ ├── index.vue
│ │ │ │ ├── releases/
│ │ │ │ │ └── index.vue
│ │ │ │ └── upgrade/
│ │ │ │ └── index.vue
│ │ │ ├── table-refresh/
│ │ │ │ └── index.vue
│ │ │ ├── table-search/
│ │ │ │ └── index.vue
│ │ │ ├── table-setting/
│ │ │ │ └── index.vue
│ │ │ ├── task-list/
│ │ │ │ └── index.vue
│ │ │ ├── terminal/
│ │ │ │ ├── database.vue
│ │ │ │ └── index.vue
│ │ │ ├── tooltip/
│ │ │ │ └── index.vue
│ │ │ ├── upload/
│ │ │ │ └── index.vue
│ │ │ ├── v-charts/
│ │ │ │ ├── components/
│ │ │ │ │ ├── Line.vue
│ │ │ │ │ └── Pie.vue
│ │ │ │ └── index.vue
│ │ │ └── vscode-open/
│ │ │ └── index.vue
│ │ ├── composables/
│ │ │ └── useGlobalStore.ts
│ │ ├── config/
│ │ │ ├── nprogress.ts
│ │ │ └── pinia-persist.ts
│ │ ├── directives/
│ │ │ ├── index.ts
│ │ │ └── modules/
│ │ │ └── integer.ts
│ │ ├── enums/
│ │ │ ├── app.ts
│ │ │ ├── files.ts
│ │ │ └── http-enum.ts
│ │ ├── env.d.ts
│ │ ├── global/
│ │ │ ├── bus.ts
│ │ │ ├── form-rules.ts
│ │ │ ├── mimetype.ts
│ │ │ ├── use-logo.ts
│ │ │ └── use-theme.ts
│ │ ├── lang/
│ │ │ ├── index.ts
│ │ │ └── modules/
│ │ │ ├── en.ts
│ │ │ ├── es-es.ts
│ │ │ ├── ja.ts
│ │ │ ├── ko.ts
│ │ │ ├── ms.ts
│ │ │ ├── pt-br.ts
│ │ │ ├── ru.ts
│ │ │ ├── tr.ts
│ │ │ ├── zh-Hant.ts
│ │ │ └── zh.ts
│ │ ├── layout/
│ │ │ ├── components/
│ │ │ │ ├── AppFooter.vue
│ │ │ │ ├── AppMain.vue
│ │ │ │ ├── MobileHeader.vue
│ │ │ │ ├── Sidebar/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── Collapse.vue
│ │ │ │ │ │ ├── Logo.vue
│ │ │ │ │ │ └── SubItem.vue
│ │ │ │ │ ├── index.scss
│ │ │ │ │ └── index.vue
│ │ │ │ ├── Tabs/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── TabItem.vue
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.ts
│ │ │ ├── hooks/
│ │ │ │ └── useResize.ts
│ │ │ └── index.vue
│ │ ├── main.ts
│ │ ├── routers/
│ │ │ ├── cache-router.ts
│ │ │ ├── constant.ts
│ │ │ ├── index.ts
│ │ │ ├── modules/
│ │ │ │ ├── ai.ts
│ │ │ │ ├── app-store.ts
│ │ │ │ ├── container.ts
│ │ │ │ ├── cronjob.ts
│ │ │ │ ├── database.ts
│ │ │ │ ├── error.ts
│ │ │ │ ├── host.ts
│ │ │ │ ├── log.ts
│ │ │ │ ├── setting.ts
│ │ │ │ ├── terminal.ts
│ │ │ │ ├── toolbox.ts
│ │ │ │ └── website.ts
│ │ │ └── router.ts
│ │ ├── store/
│ │ │ ├── index.ts
│ │ │ ├── interface/
│ │ │ │ └── index.ts
│ │ │ └── modules/
│ │ │ ├── global.ts
│ │ │ ├── menu.ts
│ │ │ ├── process.ts
│ │ │ ├── tabs.ts
│ │ │ └── terminal.ts
│ │ ├── styles/
│ │ │ ├── common.scss
│ │ │ ├── element-dark.scss
│ │ │ ├── element.scss
│ │ │ ├── index.scss
│ │ │ ├── mixins.scss
│ │ │ ├── moblie.scss
│ │ │ ├── reset.scss
│ │ │ ├── style.css
│ │ │ └── var.scss
│ │ ├── typings/
│ │ │ ├── global.d.ts
│ │ │ ├── plugins.d.ts
│ │ │ └── window.d.ts
│ │ ├── utils/
│ │ │ ├── agent.ts
│ │ │ ├── app.ts
│ │ │ ├── bus.ts
│ │ │ ├── dashboardCache.ts
│ │ │ ├── docker.ts
│ │ │ ├── echarts.ts
│ │ │ ├── get-env.ts
│ │ │ ├── message.ts
│ │ │ ├── node.ts
│ │ │ ├── router.ts
│ │ │ ├── runtime.ts
│ │ │ ├── shortcuts.ts
│ │ │ ├── svg.ts
│ │ │ ├── theme.ts
│ │ │ ├── util.ts
│ │ │ ├── version.ts
│ │ │ └── xpack.ts
│ │ └── views/
│ │ ├── ai/
│ │ │ ├── agents/
│ │ │ │ ├── agent/
│ │ │ │ │ ├── add/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── terminal.vue
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── index.vue
│ │ │ │ │ │ └── tabs/
│ │ │ │ │ │ ├── channels/
│ │ │ │ │ │ │ ├── dingtalk.vue
│ │ │ │ │ │ │ ├── discord.vue
│ │ │ │ │ │ │ ├── feishu.vue
│ │ │ │ │ │ │ ├── qq.vue
│ │ │ │ │ │ │ ├── telegram.vue
│ │ │ │ │ │ │ └── wecom.vue
│ │ │ │ │ │ ├── channels.vue
│ │ │ │ │ │ ├── model.vue
│ │ │ │ │ │ ├── settings/
│ │ │ │ │ │ │ ├── other.vue
│ │ │ │ │ │ │ └── security.vue
│ │ │ │ │ │ └── settings.vue
│ │ │ │ │ ├── delete/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── model/
│ │ │ │ ├── add/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── pool/
│ │ │ │ └── index.vue
│ │ │ ├── gpu/
│ │ │ │ ├── current/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── history/
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.vue
│ │ │ ├── mcp/
│ │ │ │ ├── index.vue
│ │ │ │ └── server/
│ │ │ │ ├── bind/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── config/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── import/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ └── volume/
│ │ │ │ └── index.vue
│ │ │ └── model/
│ │ │ ├── index.vue
│ │ │ ├── ollama/
│ │ │ │ ├── add/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── conn/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── del/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── domain/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── terminal/
│ │ │ │ └── index.vue
│ │ │ ├── router-menu.vue
│ │ │ ├── tensorrt/
│ │ │ │ ├── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ └── vllm/
│ │ │ └── index.vue
│ │ ├── app-store/
│ │ │ ├── apps/
│ │ │ │ ├── app/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── no-app/
│ │ │ │ └── index.vue
│ │ │ ├── components/
│ │ │ │ └── tag.vue
│ │ │ ├── detail/
│ │ │ │ ├── form/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── install/
│ │ │ │ │ └── index.vue
│ │ │ │ └── params/
│ │ │ │ └── index.vue
│ │ │ ├── index.scss
│ │ │ ├── index.vue
│ │ │ ├── installed/
│ │ │ │ ├── app/
│ │ │ │ │ ├── card.vue
│ │ │ │ │ ├── header.vue
│ │ │ │ │ ├── icon.vue
│ │ │ │ │ └── info.vue
│ │ │ │ ├── check/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── delete/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── detail/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── ignore/
│ │ │ │ │ ├── create/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── upgrade/
│ │ │ │ ├── diff/
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.vue
│ │ │ └── setting/
│ │ │ └── index.vue
│ │ ├── container/
│ │ │ ├── compose/
│ │ │ │ ├── delete/
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.vue
│ │ │ ├── container/
│ │ │ │ ├── commit/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── file-browser/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── inspect/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── monitor/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── operate/
│ │ │ │ │ ├── confirm.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ ├── network.vue
│ │ │ │ │ └── volume.vue
│ │ │ │ ├── prune/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── rename/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── terminal/
│ │ │ │ │ └── index.vue
│ │ │ │ └── upgrade/
│ │ │ │ └── index.vue
│ │ │ ├── dashboard/
│ │ │ │ └── index.vue
│ │ │ ├── docker-status/
│ │ │ │ └── index.vue
│ │ │ ├── image/
│ │ │ │ ├── build/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── delete/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── load/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── prune/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── pull/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── push/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── save/
│ │ │ │ │ └── index.vue
│ │ │ │ └── tag/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ ├── network/
│ │ │ │ ├── create/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── detail/
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.vue
│ │ │ ├── repo/
│ │ │ │ ├── index.vue
│ │ │ │ └── operator/
│ │ │ │ └── index.vue
│ │ │ ├── setting/
│ │ │ │ ├── index.vue
│ │ │ │ ├── ipv6/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── log/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── mirror/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── registry/
│ │ │ │ │ └── index.vue
│ │ │ │ └── sock-path/
│ │ │ │ └── index.vue
│ │ │ ├── template/
│ │ │ │ ├── detail/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── import/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── operator/
│ │ │ │ └── index.vue
│ │ │ └── volume/
│ │ │ ├── create/
│ │ │ │ └── index.vue
│ │ │ └── index.vue
│ │ ├── cronjob/
│ │ │ ├── cronjob/
│ │ │ │ ├── backup/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── config/
│ │ │ │ │ └── clean-log.vue
│ │ │ │ ├── helper.ts
│ │ │ │ ├── import/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ └── record/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ └── library/
│ │ │ ├── index.vue
│ │ │ ├── operate/
│ │ │ │ └── index.vue
│ │ │ └── run/
│ │ │ └── index.vue
│ │ ├── database/
│ │ │ ├── index.vue
│ │ │ ├── mysql/
│ │ │ │ ├── bind/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── check/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── conn/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── create/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── delete/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── password/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── remote/
│ │ │ │ │ ├── delete/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ └── setting/
│ │ │ │ ├── helper.ts
│ │ │ │ ├── index.vue
│ │ │ │ ├── slow-log/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── status/
│ │ │ │ │ └── index.vue
│ │ │ │ └── variables/
│ │ │ │ └── index.vue
│ │ │ ├── postgresql/
│ │ │ │ ├── bind/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── check/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── conn/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── create/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── delete/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── password/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── privileges/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── remote/
│ │ │ │ │ ├── delete/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ └── setting/
│ │ │ │ └── index.vue
│ │ │ └── redis/
│ │ │ ├── check/
│ │ │ │ └── index.vue
│ │ │ ├── command/
│ │ │ │ └── index.vue
│ │ │ ├── conn/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ ├── remote/
│ │ │ │ ├── delete/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ └── setting/
│ │ │ ├── index.vue
│ │ │ ├── persistence/
│ │ │ │ └── index.vue
│ │ │ └── status/
│ │ │ └── index.vue
│ │ ├── home/
│ │ │ ├── app/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ ├── quick/
│ │ │ │ └── index.vue
│ │ │ └── status/
│ │ │ └── index.vue
│ │ ├── host/
│ │ │ ├── disk-management/
│ │ │ │ ├── components/
│ │ │ │ │ └── disk-card.vue
│ │ │ │ ├── disk/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── partition/
│ │ │ │ └── index.vue
│ │ │ ├── file-management/
│ │ │ │ ├── batch-role/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── change-role/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── chown/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── code-editor/
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── tabs/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── compress/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── convert/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── create/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── decompress/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── delete/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── detail/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── download/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── favorite/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── hooks/
│ │ │ │ │ └── searchable.ts
│ │ │ │ ├── index.vue
│ │ │ │ ├── move/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── preview/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── process/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── recycle-bin/
│ │ │ │ │ ├── delete/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── reduce/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── rename/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── terminal/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── text-preview/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── upload/
│ │ │ │ │ └── index.vue
│ │ │ │ └── wget/
│ │ │ │ └── index.vue
│ │ │ ├── firewall/
│ │ │ │ ├── advance/
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── forward/
│ │ │ │ │ ├── import/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── ip/
│ │ │ │ │ ├── import/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── port/
│ │ │ │ │ ├── import/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ └── status/
│ │ │ │ └── index.vue
│ │ │ ├── monitor/
│ │ │ │ ├── index.vue
│ │ │ │ ├── monitor/
│ │ │ │ │ └── index.vue
│ │ │ │ └── setting/
│ │ │ │ ├── days/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── default-io/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── default-network/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── interval/
│ │ │ │ └── index.vue
│ │ │ ├── process/
│ │ │ │ ├── index.vue
│ │ │ │ ├── network/
│ │ │ │ │ └── index.vue
│ │ │ │ └── process/
│ │ │ │ ├── detail/
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.vue
│ │ │ └── ssh/
│ │ │ ├── index.vue
│ │ │ ├── log/
│ │ │ │ ├── index.vue
│ │ │ │ └── log.vue
│ │ │ ├── session/
│ │ │ │ └── index.vue
│ │ │ └── ssh/
│ │ │ ├── address/
│ │ │ │ └── index.vue
│ │ │ ├── auth-keys/
│ │ │ │ └── index.vue
│ │ │ ├── certification/
│ │ │ │ ├── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ ├── port/
│ │ │ │ └── index.vue
│ │ │ └── root/
│ │ │ └── index.vue
│ │ ├── log/
│ │ │ ├── index.vue
│ │ │ ├── login/
│ │ │ │ └── index.vue
│ │ │ ├── operation/
│ │ │ │ └── index.vue
│ │ │ ├── router/
│ │ │ │ └── index.vue
│ │ │ ├── system/
│ │ │ │ └── index.vue
│ │ │ ├── task/
│ │ │ │ └── index.vue
│ │ │ └── website/
│ │ │ └── index.vue
│ │ ├── login/
│ │ │ ├── components/
│ │ │ │ └── login-form.vue
│ │ │ └── index.vue
│ │ ├── setting/
│ │ │ ├── about/
│ │ │ │ └── index.vue
│ │ │ ├── alert/
│ │ │ │ ├── dash/
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── task/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── log/
│ │ │ │ │ └── index.vue
│ │ │ │ └── setting/
│ │ │ │ ├── email/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── phone/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── time-range/
│ │ │ │ │ └── index.vue
│ │ │ │ └── webhook/
│ │ │ │ └── index.vue
│ │ │ ├── backup-account/
│ │ │ │ ├── helper.ts
│ │ │ │ ├── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ ├── expired.vue
│ │ │ ├── index.vue
│ │ │ ├── license/
│ │ │ │ ├── bind/
│ │ │ │ │ ├── free.vue
│ │ │ │ │ └── xpack.vue
│ │ │ │ └── index.vue
│ │ │ ├── panel/
│ │ │ │ ├── api-interface/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── edition/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── hidemenu/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── name/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── password/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── proxy/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── systemip/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── theme-color/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── timeout/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── username/
│ │ │ │ │ └── index.vue
│ │ │ │ └── watermark/
│ │ │ │ └── index.vue
│ │ │ ├── safe/
│ │ │ │ ├── allowips/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── bind/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── domain/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── entrance/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── mfa/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── passkey/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── port/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── response/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── ssl/
│ │ │ │ │ └── index.vue
│ │ │ │ └── timeout/
│ │ │ │ └── index.vue
│ │ │ └── snapshot/
│ │ │ ├── create/
│ │ │ │ └── index.vue
│ │ │ ├── import/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ ├── recover/
│ │ │ │ └── index.vue
│ │ │ └── status/
│ │ │ └── index.vue
│ │ ├── terminal/
│ │ │ ├── command/
│ │ │ │ ├── import/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ ├── host/
│ │ │ │ ├── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ ├── setting/
│ │ │ │ ├── ai/
│ │ │ │ │ ├── helper.ts
│ │ │ │ │ └── index.vue
│ │ │ │ ├── default_conn/
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.vue
│ │ │ └── terminal/
│ │ │ ├── host-create.vue
│ │ │ └── index.vue
│ │ ├── toolbox/
│ │ │ ├── clam/
│ │ │ │ ├── index.vue
│ │ │ │ ├── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── record/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── setting/
│ │ │ │ │ └── index.vue
│ │ │ │ └── status/
│ │ │ │ └── index.vue
│ │ │ ├── clean/
│ │ │ │ └── index.vue
│ │ │ ├── device/
│ │ │ │ ├── dns/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── hostname/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── hosts/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── ntp/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── passwd/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── swap/
│ │ │ │ │ └── index.vue
│ │ │ │ └── time-zone/
│ │ │ │ └── index.vue
│ │ │ ├── fail2ban/
│ │ │ │ ├── ban-action/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── ban-time/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── find-time/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── ips/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── log-path/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── max-retry/
│ │ │ │ │ └── index.vue
│ │ │ │ └── port/
│ │ │ │ └── index.vue
│ │ │ ├── ftp/
│ │ │ │ ├── index.vue
│ │ │ │ ├── log/
│ │ │ │ │ └── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ └── supervisor/
│ │ │ ├── config/
│ │ │ │ ├── basic/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── source/
│ │ │ │ └── index.vue
│ │ │ ├── create/
│ │ │ │ └── index.vue
│ │ │ ├── file/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ ├── log/
│ │ │ │ └── index.vue
│ │ │ └── status/
│ │ │ ├── index.vue
│ │ │ └── init/
│ │ │ └── index.vue
│ │ └── website/
│ │ ├── runtime/
│ │ │ ├── app/
│ │ │ │ └── index.vue
│ │ │ ├── common/
│ │ │ │ └── utils.ts
│ │ │ ├── components/
│ │ │ │ ├── dir/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── environment/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── extra_hosts/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── node-config.vue
│ │ │ │ ├── port/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── port-jump.vue
│ │ │ │ ├── runtime-status.vue
│ │ │ │ ├── terminal.vue
│ │ │ │ └── volume/
│ │ │ │ └── index.vue
│ │ │ ├── delete/
│ │ │ │ └── index.vue
│ │ │ ├── dotnet/
│ │ │ │ ├── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ ├── go/
│ │ │ │ ├── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ ├── java/
│ │ │ │ ├── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ ├── node/
│ │ │ │ ├── index.vue
│ │ │ │ ├── module/
│ │ │ │ │ └── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ ├── php/
│ │ │ │ ├── check/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── config/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── container/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── fpm-status/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── function/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ ├── performance/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── php-fpm/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── slow-log/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── timeout/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ └── upload/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── create/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── extension-management/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── extension-template/
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── supervisor/
│ │ │ │ ├── create/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── file/
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.vue
│ │ │ └── python/
│ │ │ ├── index.vue
│ │ │ └── operate/
│ │ │ └── index.vue
│ │ ├── ssl/
│ │ │ ├── acme-account/
│ │ │ │ ├── create/
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.vue
│ │ │ ├── apply/
│ │ │ │ └── index.vue
│ │ │ ├── ca/
│ │ │ │ ├── create/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── detail/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── obtain/
│ │ │ │ └── index.vue
│ │ │ ├── create/
│ │ │ │ └── index.vue
│ │ │ ├── detail/
│ │ │ │ └── index.vue
│ │ │ ├── dns-account/
│ │ │ │ ├── create/
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ ├── obtain/
│ │ │ │ └── index.vue
│ │ │ └── upload/
│ │ │ └── index.vue
│ │ └── website/
│ │ ├── batch-op/
│ │ │ ├── group.vue
│ │ │ └── https.vue
│ │ ├── check/
│ │ │ └── index.vue
│ │ ├── components/
│ │ │ ├── group/
│ │ │ │ └── index.vue
│ │ │ ├── https/
│ │ │ │ └── index.vue
│ │ │ └── website-ssl/
│ │ │ └── index.vue
│ │ ├── config/
│ │ │ ├── basic/
│ │ │ │ ├── anti-Leech/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── auth-basic/
│ │ │ │ │ ├── create/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ └── index.vue
│ │ │ │ ├── cors/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── default-doc/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── domain/
│ │ │ │ │ ├── create/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ └── index.vue
│ │ │ │ ├── https/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ ├── limit-conn/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── load-balance/
│ │ │ │ │ ├── file/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── form/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── index.vue
│ │ │ │ │ └── operate/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── other/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── php/
│ │ │ │ │ ├── composer/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ └── index.vue
│ │ │ │ ├── proxy/
│ │ │ │ │ ├── cache/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── create/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── file/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ └── index.vue
│ │ │ │ ├── real-ip/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── redirect/
│ │ │ │ │ ├── create/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ ├── file/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ └── index.vue
│ │ │ │ ├── resource/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── rewrite/
│ │ │ │ │ ├── custom/
│ │ │ │ │ │ └── index.vue
│ │ │ │ │ └── index.vue
│ │ │ │ ├── site-folder/
│ │ │ │ │ └── index.vue
│ │ │ │ └── stream/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ ├── log/
│ │ │ │ ├── index.vue
│ │ │ │ └── log-fiile/
│ │ │ │ └── index.vue
│ │ │ └── resource/
│ │ │ ├── index.vue
│ │ │ └── nginx/
│ │ │ └── index.vue
│ │ ├── cors/
│ │ │ └── index.vue
│ │ ├── create/
│ │ │ ├── index.vue
│ │ │ └── site-alert/
│ │ │ └── index.vue
│ │ ├── default/
│ │ │ └── index.vue
│ │ ├── delete/
│ │ │ └── index.vue
│ │ ├── domain/
│ │ │ └── index.vue
│ │ ├── domain-create/
│ │ │ └── index.vue
│ │ ├── html/
│ │ │ └── index.vue
│ │ ├── index.vue
│ │ ├── nginx/
│ │ │ ├── index.vue
│ │ │ ├── module/
│ │ │ │ ├── build/
│ │ │ │ │ └── index.vue
│ │ │ │ ├── index.vue
│ │ │ │ └── operate/
│ │ │ │ └── index.vue
│ │ │ ├── other/
│ │ │ │ ├── https/
│ │ │ │ │ └── index.vue
│ │ │ │ └── index.vue
│ │ │ ├── performance/
│ │ │ │ └── index.vue
│ │ │ ├── source/
│ │ │ │ └── index.vue
│ │ │ └── status/
│ │ │ └── index.vue
│ │ └── status/
│ │ └── index.vue
│ ├── tailwind.config.js
│ ├── tsconfig.json
│ ├── vite-env.d.ts
│ └── vite.config.ts
└── sonar-project.properties
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.ts linguist-language=Go
*.js linguist-language=Go
*.css linguist-language=Go
*.scss linguist-language=Go
*.html linguist-language=Go
================================================
FILE: .github/ISSUE_TEMPLATE/1_bug_report.yml
================================================
name: 'Bug Report'
description: 'Report an Bug'
title: '[Bug] '
assignees: wanghe-fit2cloud
body:
- type: markdown
attributes:
value: "## Contact Information"
- type: input
validations:
required: false
attributes:
label: "Contact Information"
description: "The ways to quickly contact you: WeChat group number and nickname, email, etc."
- type: markdown
attributes:
value: "## Environment Information"
- type: input
validations:
required: true
attributes:
label: "1Panel Version"
description: "Log in to the 1Panel Web console and check the current version at the bottom right of the page."
- type: markdown
attributes:
value: "## Detailed information"
- type: textarea
attributes:
label: "Problem Description"
description: "Briefly describe the issue you’ve encountered."
validations:
required: true
- type: textarea
attributes:
label: "Steps to Reproduce"
description: "How can this issue be reproduced."
validations:
required: true
- type: textarea
attributes:
label: "The expected correct result"
- type: textarea
attributes:
label: "Related log output"
description: "Please paste any relevant log output here. It will automatically be formatted as code, so no backticks are necessary."
render: shell
- type: textarea
attributes:
label: "Additional Information"
description: "If you have any additional information to provide, you can include it here (screenshots, videos, etc., are welcome)."
================================================
FILE: .github/ISSUE_TEMPLATE/2_feature_request.yml
================================================
name: 'Feature Request'
description: 'Suggest an idea'
title: '[Feature] '
assignees: wanghe-fit2cloud
body:
- type: markdown
attributes:
value: "## Environment Information"
- type: input
validations:
required: true
attributes:
label: "1Panel Version"
description: "Log in to the 1Panel Web console and check the current version at the bottom right of the page."
- type: markdown
attributes:
value: "## Detailed information"
- type: textarea
attributes:
label: "Please describe your needs or suggestions for improvements"
validations:
required: true
- type: textarea
attributes:
label: "Please describe the solution you suggest"
- type: textarea
attributes:
label: "Additional Information"
description: "If you have any additional information to provide, you can include it here (screenshots, videos, etc., are welcome)."
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Questions & Discussions
url: https://github.com/1Panel-dev/1Panel/discussions
about: Raise questions about the installation, deployment, use and other aspects of the project.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
#### What this PR does / why we need it?
#### Summary of your change
#### Please indicate you've done the following:
- [ ] Made sure tests are passing and test coverage is added if needed.
- [ ] Made sure commit message follow the rule of [Conventional Commits specification](https://www.conventionalcommits.org/).
- [ ] Considered the docs impact and opened a new docs issue or PR with docs changes if needed.
================================================
FILE: .github/workflows/add-labels-for-pr.yml
================================================
name: General PR Handling for 1Panel
on: pull_request
permissions:
pull-requests: write
jobs:
generic_handler:
name: Add Labels to PR
if: github.repository == '1Panel-dev/1Panel'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-ecosystem/action-add-labels@v1
with:
github_token: ${{ secrets.GITHUBTOKEN }}
labels: ${{ github.base_ref }}
================================================
FILE: .github/workflows/build-and-publish.yml
================================================
name: Build And Publish (OSS + R2)
on:
push:
tags:
- 'v*'
jobs:
create-release:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '22.19.0'
- name: Build Web
run: |
cd frontend && npm install && npm run build:pro
env:
NODE_OPTIONS: --max-old-space-size=8192
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.24'
cache-dependency-path: |
core/go.sum
agent/go.sum
- name: Build Release
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: '~> v2'
args: release --skip=publish --clean
- name: Upload Assets
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
draft: true
files: |
dist/*.tar.gz
dist/checksums.txt
- name: Setup OSSUTIL
uses: yizhoumo/setup-ossutil@v2
with:
endpoint: ${{ secrets.OSS_ENDPOINT }}
access-key-id: ${{ secrets.OSS_ACCESS_KEY_ID }}
access-key-secret: ${{ secrets.OSS_ACCESS_KEY_SECRET }}
ossutil-version: '1.7.18'
- name: Upload Assets to OSS
run: |
ossutil cp -r dist/ oss://resource-fit2cloud-com/1panel/package/v2/stable/${{ github.ref_name }}/release/ --include "*.tar.gz" --include "checksums.txt" --only-current-dir --force
- name: Setup Rclone
uses: AnimMouse/setup-rclone@v1
with:
rclone_config: ${{ secrets.RCLONE_CONFIG }}
- name: Upload to Cloudflare R2
run: |
rclone copy dist/ cloudflare_r2:package/v2/stable/${{ github.ref_name }}/release/ --include "*.tar.gz" --include "checksums.txt" --progress
================================================
FILE: .github/workflows/issue-translator.yml
================================================
name: Issue Translator
on:
issue_comment:
types: [created]
issues:
types: [opened]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: usthe/issues-translate-action@v2.7
with:
IS_MODIFY_TITLE: true
BOT_GITHUB_TOKEN: ${{ secrets.ISSUE_TRANSLATOR_TOKEN }}
================================================
FILE: .github/workflows/llm-code-review.yml
================================================
name: LLM Code Review
permissions:
contents: read
pull-requests: write
on:
pull_request:
types: [opened, reopened, synchronize]
jobs:
llm-code-review:
runs-on: ubuntu-latest
steps:
- uses: fit2cloud/LLM-CodeReview-Action@main
env:
GITHUB_TOKEN: ${{ secrets.FIT2CLOUDRD_LLM_CODE_REVIEW_TOKEN }}
OPENAI_API_KEY: ${{ secrets.ALIYUN_LLM_API_KEY }}
LANGUAGE: English
OPENAI_API_ENDPOINT: https://dashscope.aliyuncs.com/compatible-mode/v1
MODEL: qwen2.5-coder-3b-instruct
PROMPT: "Please check the following code differences for any irregularities, potential issues, or optimization suggestions, and provide your answers in English."
top_p: 1
temperature: 1
# max_tokens: 10000
MAX_PATCH_LENGTH: 10000
IGNORE_PATTERNS: "/node_modules,*.md,/dist,/.github"
FILE_PATTERNS: "*.java,*.go,*.py,*.vue,*.ts,*.js,*.css,*.scss,*.html"
================================================
FILE: .github/workflows/sonarcloud-scan.yml
================================================
name: SonarCloud Scan
on:
push:
branches:
- dev
pull_request:
types: [opened, synchronize, reopened]
jobs:
sonarcloud:
name: SonarCloud
if: github.repository == '1Panel-dev/1Panel'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: SonarCloud Scan
uses: SonarSource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUBTOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
================================================
FILE: .github/workflows/sync2gitee.yml
================================================
name: Synchronize to Gitee
on: [push]
jobs:
repo-sync:
if: github.repository == '1Panel-dev/1Panel'
runs-on: ubuntu-latest
steps:
- name: Mirror the Github organization repos to Gitee.
uses: Yikun/hub-mirror-action@master
with:
src: 'github/1Panel-dev'
dst: 'gitee/fit2cloud-feizhiyun'
dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
dst_token: ${{ secrets.GITEE_TOKEN }}
static_list: "1Panel"
force_update: true
================================================
FILE: .github/workflows/tyops-check.yml
================================================
name: Typos Check
on: pull_request
jobs:
run:
name: Spell Check with Typos
runs-on: ubuntu-latest
steps:
- name: Checkout Actions Repository
uses: actions/checkout@v2
- name: Check spelling
uses: crate-ci/typos@master
================================================
FILE: .gitignore
================================================
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
build/1panel-agent
build/1panel-core
# Mac
.DS_Store
*/.DS_Store
# VS Code
.vscode
*.project
*.factorypath
__debug*
# IntelliJ IDEA
.idea/*
!.idea/icon.png
*.iws
*.iml
*.ipr
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories
/pkg/
backend/__debug_bin
core/cmd/server/__debug_bin
core/cmd/server/web/assets
core/cmd/server/web/monacoeditorwork
core/cmd/server/web/index.html
frontend/auto-imports.d.ts
frontend/components.d.ts
frontend/src/xpack
agent/xpack
agent/router/entry_xpack.go
agent/server/init_xpack.go
agent/utils/xpack/xpack.go
agent/utils/xpack/xpack_xpack.go
core/xpack
core/router/entry_xpack.go
core/server/init_xpack.go
core/utils/xpack/xpack.go
core/utils/xpack/xpack_xpack.go
core/xpack-ee
core/router/entry_xpackee.go
core/server/init_xpackee.go
core/utils/xpack/xpack_xpackee.go
.history/
dist/
1pctl
1panel.service
install.sh
quick_start.sh
cmd/server/fileList.txt
.fileList.txt
1Panel.code-workspace
core/.golangci.yml
agent/.golangci.yml
.opencode
openspec
CLAUDE.md
AGENTS.md
opencode.json
superpowers
.worktrees/
================================================
FILE: .goreleaser.yaml
================================================
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
# vim: set ts=2 sw=2 tw=0 fo=jcroql
version: 2
before:
hooks:
# - export NODE_OPTIONS="--max-old-space-size=8192"
# - make build_web
- chmod +x ./ci/script.sh
- ./ci/script.sh
- sed -i 's@ORIGINAL_VERSION=.*@ORIGINAL_VERSION=v{{ .Version }}@g' 1pctl
builds:
- id: agent
dir: agent
main: cmd/server/main.go
binary: 1panel-agent
flags:
- -tags=xpack
- -trimpath
ldflags:
- -w -s
env:
- CGO_ENABLED=0
goos:
- linux
goarm:
- 7
goarch:
- amd64
- arm64
- arm
- ppc64le
- s390x
- riscv64
- id: core
dir: core
main: cmd/server/main.go
binary: 1panel-core
flags:
- -tags=xpack
- -trimpath
ldflags:
- -w -s
env:
- CGO_ENABLED=0
goos:
- linux
goarm:
- 7
goarch:
- amd64
- arm64
- arm
- ppc64le
- s390x
- riscv64
archives:
- formats: [ 'tar.gz' ]
ids: [core, agent]
name_template: "1panel-v{{ .Version }}-{{ .Os }}-{{ .Arch }}{{- if .Arm }}v{{ .Arm }}{{ end }}"
wrap_in_directory: true
files:
- 1pctl
- install.sh
- 1panel-core.service
- 1panel-agent.service
- initscript/*
- lang/*
- GeoIP.mmdb
checksum:
name_template: 'checksums.txt'
changelog:
sort: asc
filters:
exclude:
- "^docs:"
- "^test:"
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
As a contributor, you should agree that:
- The producer can adjust the open-source agreement to be more strict or relaxed as deemed necessary.
- Your contributed code may be used for commercial purposes, including but not limited to its cloud business operations.
## Create pull request
PR are always welcome, even if they only contain small fixes like typos or a few lines of code. If there will be a significant effort, please document it as an issue and get a discussion going before starting to work on it.
Please submit a PR broken down into small changes bit by bit. A PR consisting of a lot of features and code changes may be hard to review. It is recommended to submit PRs in an incremental fashion.
This [development guideline](https://docs.1panel.pro/dev_manual/dev_manual/) contains information about repository structure, how to set up development environment, how to run it, and more.
Note: If you split your pull request to small changes, please make sure any of the changes goes to master will not break anything. Otherwise, it can not be merged until this feature complete.
## Report issues
It is a great way to contribute by reporting an issue. Well-written and complete bug reports are always welcome! Please open an issue and follow the template to fill in required information.
Before opening any issue, please look up the existing issues to avoid submitting a duplication.
If you find a match, you can "subscribe" to it to get notified on updates. If you have additional helpful information about the issue, please leave a comment.
When reporting issues, always include:
* Which version you are using.
* Steps to reproduce the issue.
* Snapshots or log files if needed
Because the issues are open to the public, when submitting files, be sure to remove any sensitive information, e.g. user name, password, IP address, and company name. You can
replace those parts with "REDACTED" or other strings like "****".
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: Makefile
================================================
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOARCH=$(shell go env GOARCH)
GOOS=$(shell go env GOOS )
BASE_PATH := $(shell pwd)
BUILD_PATH = $(BASE_PATH)/build
WEB_PATH=$(BASE_PATH)/frontend
ASSERT_PATH= $(BASE_PATH)/core/cmd/server/web/assets
CORE_PATH=$(BASE_PATH)/core
CORE_MAIN=$(CORE_PATH)/cmd/server/main.go
CORE_NAME=1panel-core
AGENT_PATH=$(BASE_PATH)/agent
AGENT_MAIN=$(AGENT_PATH)/cmd/server/main.go
AGENT_NAME=1panel-agent
clean_assets:
rm -rf $(ASSERT_PATH)
upx_bin:
upx $(BUILD_PATH)/$(CORE_NAME)
upx $(BUILD_PATH)/$(AGENT_NAME)
build_frontend:
cd $(WEB_PATH) && npm install && npm run build:pro
build_core_on_linux:
cd $(CORE_PATH) \
&& CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) $(GOBUILD) -trimpath -ldflags '-s -w' -o $(BUILD_PATH)/$(CORE_NAME) $(CORE_MAIN)
build_agent_on_linux:
cd $(AGENT_PATH) \
&& CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) $(GOBUILD) -trimpath -ldflags '-s -w' -o $(BUILD_PATH)/$(AGENT_NAME) $(AGENT_MAIN)
build_core_on_darwin:
cd $(CORE_PATH) \
&& CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) -trimpath -ldflags '-s -w' -o $(BUILD_PATH)/$(CORE_NAME) $(CORE_MAIN)
build_agent_on_darwin:
cd $(AGENT_PATH) \
&& CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) -trimpath -ldflags '-s -w' -o $(BUILD_PATH)/$(AGENT_NAME) $(AGENT_MAIN)
build_all: build_frontend build_core_on_linux build_agent_on_linux
build_on_local: clean_assets build_frontend build_core_on_darwin build_agent_on_darwin
================================================
FILE: OWNERS
================================================
reviewers:
- wanghe-fit2cloud
- zhengkunwang223
- ssongliu
approvers:
- wanghe-fit2cloud
- zhengkunwang223
- ssongliu
================================================
FILE: README.md
================================================
<p align="center"><a href="https://1panel.pro"><img src="https://resource.1panel.pro/img/1panel-logo.png" alt="1Panel" width="300" /></a></p>
<h3 align="center">Take control of your VPS with 1Panel</h3>
<p align="center">
<a href="https://trendshift.io/repositories/2462" target="_blank"><img src="https://trendshift.io/api/badge/repositories/2462" alt="1Panel-dev%2F1Panel | Trendshift" style="width: 240px; height: auto;" /></a>
</p>
<p align="center">
<a href="https://www.gnu.org/licenses/gpl-3.0.html"><img src="https://shields.io/github/license/1Panel-dev/1Panel?color=%231890FF" alt="License: GPL v3"></a>
<a href="https://app.codacy.com/gh/1Panel-dev/1Panel?utm_source=github.com&utm_medium=referral&utm_content=1Panel-dev/1Panel&utm_campaign=Badge_Grade_Dashboard"><img src="https://app.codacy.com/project/badge/Grade/da67574fd82b473992781d1386b937ef" alt="Codacy"></a>
<a href="https://discord.gg/bUpUqWqdRr" target="_blank">
<img src="https://img.shields.io/discord/1318846410149335080?logo=discord&labelColor=%20%235462eb&logoColor=%20%23f5f5f5&color=%20%235462eb"
alt="chat on Discord"></a>
<a href="https://github.com/1Panel-dev/1Panel/releases"><img src="https://img.shields.io/github/v/release/1Panel-dev/1Panel" alt="GitHub release"></a>
<a href="https://github.com/1Panel-dev/1Panel"><img src="https://img.shields.io/github/stars/1Panel-dev/1Panel?color=%231890FF&style=flat-square" alt="Stars"></a><br>
</p>
<p align="center">
<a href="/README.md"><img alt="English" src="https://img.shields.io/badge/English-d9d9d9"></a>
<a href="/docs/README.zh-Hans.md"><img alt="中文(简体)" src="https://img.shields.io/badge/中文(简体)-d9d9d9"></a>
<a href="/docs/README.ja.md"><img alt="日本語" src="https://img.shields.io/badge/日本語-d9d9d9"></a>
<a href="/docs/README.pt-br.md"><img alt="Português (Brasil)" src="https://img.shields.io/badge/Português (Brasil)-d9d9d9"></a>
<a href="/docs/README.ar.md"><img alt="العربية" src="https://img.shields.io/badge/العربية-d9d9d9"></a>
<a href="/docs/README.de.md"><img alt="Deutsch" src="https://img.shields.io/badge/Deutsch-d9d9d9"></a>
<a href="/docs/README.es.md"><img alt="Español" src="https://img.shields.io/badge/Español-d9d9d9"></a><br>
<a href="/docs/README.fr.md"><img alt="français" src="https://img.shields.io/badge/français-d9d9d9"></a>
<a href="/docs/README.ko.md"><img alt="한국어" src="https://img.shields.io/badge/한국어-d9d9d9"></a>
<a href="/docs/README.id.md"><img alt="Bahasa Indonesia" src="https://img.shields.io/badge/Bahasa Indonesia-d9d9d9"></a>
<a href="/docs/README.zh-Hant.md"><img alt="中文(繁體)" src="https://img.shields.io/badge/中文(繁體)-d9d9d9"></a>
<a href="/docs/README.tr.md"><img alt="Türkçe" src="https://img.shields.io/badge/Türkçe-d9d9d9"></a>
<a href="/docs/README.ru.md"><img alt="Русский" src="https://img.shields.io/badge/%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9-d9d9d9"></a>
<a href="/docs/README.ms.md"><img alt="Bahasa Melayu" src="https://img.shields.io/badge/Bahasa Melayu-d9d9d9"></a>
</p>
------------------------------
## What is 1Panel?
1Panel is a modern, open-source VPS control panel that streamlines administration through an intuitive, clean web interface.
## Key Features
- **One-Click OpenClaw Deployment**: Seamlessly deploy OpenClaw agents, host local LLMs using Ollama, and monitor GPU utilization—all within a unified workspace.
- **One-Click Website Deployment**: Launch production-ready websites instantly with automatic domain binding, SSL certificate provisioning, and configuration—zero manual setup required.
- **Curated App Marketplace**: Discover, install, and update trusted open-source applications (Nextcloud, Bitwarden, Umami, and more) with a single click.
- **Centralized Server Management**: Monitor system resources and manage files, databases, containers, and services effortlessly through a unified, intuitive dashboard.
- **Enterprise-Grade Security**: Strengthen your defenses with container isolation, firewall controls, audit logging, and secure deployment practices—ensuring compliance and peace of mind.
- **Intelligent Backup & Restore**: Schedule automated backups or perform instant restores to local storage or major cloud platforms (AWS S3, Cloudflare R2, and more), with flexible retention and destination options.
## Quick Start
Execute the script below and follow the prompts to install 1Panel:
```bash
bash -c "$(curl -sSL https://resource.1panel.pro/v2/quick_start.sh)"
```
## Screenshot

## Star History
[](https://star-history.com/#1Panel-dev/1Panel&Date)
## Pro Edition
Compared to the OSS Edition, 1Panel Pro Edition provides users with a wealth of enhanced features and technical support services. Enhanced features include WAF enhancement, website tamper protection, website monitoring, GPU monitoring, custom logo and theme color, etc. [Click to view the detailed introduction of the Pro Edition](https://1panel.pro/pricing).
## Security Information
If you discover any security issues, please refer to [SECURITY.md](/SECURITY.md).
## License
Licensed under The GNU General Public License version 3 (GPLv3) (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
<https://www.gnu.org/licenses/gpl-3.0.html>
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.
================================================
FILE: SECURITY.md
================================================
# Security policy
## Supported versions
| Version | Supported |
| ------- | ------------------ |
| v1.x | :white_check_mark: |
## Reporting a vulnerability
We first appreciate and are very thankful that you've found a vulnerability issue in 1Panel! By disclosing such issue to 1Panel development team you are helping 1Panel to become a much more safer project than before! ;)
To protect the existing users of 1Panel, we kindly ask you to not disclose the vulnerability to anyone except the 1Panel development team before a fix has been rolled out. Send an email to `wanghe@fit2cloud.com` instead.
================================================
FILE: agent/app/api/v2/agents.go
================================================
package v2
import (
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/gin-gonic/gin"
)
// @Tags AI
// @Summary Create Agent
// @Accept json
// @Param request body dto.AgentCreateReq true "request"
// @Success 200 {object} dto.AgentItem
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents [post]
func (b *BaseApi) CreateAgent(c *gin.Context) {
var req dto.AgentCreateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
res, err := agentService.Create(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, res)
}
// @Tags AI
// @Summary Page Agents
// @Accept json
// @Param request body dto.SearchWithPage true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/search [post]
func (b *BaseApi) PageAgents(c *gin.Context) {
var req dto.SearchWithPage
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := agentService.Page(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags AI
// @Summary Delete Agent
// @Accept json
// @Param request body dto.AgentDeleteReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/delete [post]
func (b *BaseApi) DeleteAgent(c *gin.Context) {
var req dto.AgentDeleteReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.Delete(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Reset Agent token
// @Accept json
// @Param request body dto.AgentTokenResetReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/token/reset [post]
func (b *BaseApi) ResetAgentToken(c *gin.Context) {
var req dto.AgentTokenResetReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.ResetToken(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Update Agent model config
// @Accept json
// @Param request body dto.AgentModelConfigUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/model/update [post]
func (b *BaseApi) UpdateAgentModelConfig(c *gin.Context) {
var req dto.AgentModelConfigUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateModelConfig(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Get Providers
// @Success 200 {array} dto.ProviderInfo
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/providers [get]
func (b *BaseApi) GetAgentProviders(c *gin.Context) {
list, err := agentService.GetProviders()
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags AI
// @Summary Create Agent account
// @Accept json
// @Param request body dto.AgentAccountCreateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/accounts [post]
func (b *BaseApi) CreateAgentAccount(c *gin.Context) {
var req dto.AgentAccountCreateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.CreateAccount(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Update Agent account
// @Accept json
// @Param request body dto.AgentAccountUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/accounts/update [post]
func (b *BaseApi) UpdateAgentAccount(c *gin.Context) {
var req dto.AgentAccountUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateAccount(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Page Agent accounts
// @Accept json
// @Param request body dto.AgentAccountSearch true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/accounts/search [post]
func (b *BaseApi) PageAgentAccounts(c *gin.Context) {
var req dto.AgentAccountSearch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := agentService.PageAccounts(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags AI
// @Summary List Agent account models
// @Accept json
// @Param request body dto.AgentAccountModelReq true "request"
// @Success 200 {array} dto.AgentAccountModel
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/accounts/models [post]
func (b *BaseApi) GetAgentAccountModels(c *gin.Context) {
var req dto.AgentAccountModelReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
list, err := agentService.GetAccountModels(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags AI
// @Summary Create Agent account model
// @Accept json
// @Param request body dto.AgentAccountModelCreateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/accounts/models/create [post]
func (b *BaseApi) CreateAgentAccountModel(c *gin.Context) {
var req dto.AgentAccountModelCreateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.CreateAccountModel(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Update Agent account model
// @Accept json
// @Param request body dto.AgentAccountModelUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/accounts/models/update [post]
func (b *BaseApi) UpdateAgentAccountModel(c *gin.Context) {
var req dto.AgentAccountModelUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateAccountModel(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Delete Agent account model
// @Accept json
// @Param request body dto.AgentAccountModelDeleteReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/accounts/models/delete [post]
func (b *BaseApi) DeleteAgentAccountModel(c *gin.Context) {
var req dto.AgentAccountModelDeleteReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.DeleteAccountModel(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Verify Agent account
// @Accept json
// @Param request body dto.AgentAccountVerifyReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/accounts/verify [post]
func (b *BaseApi) VerifyAgentAccount(c *gin.Context) {
var req dto.AgentAccountVerifyReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.VerifyAccount(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Delete Agent account
// @Accept json
// @Param request body dto.AgentAccountDeleteReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/accounts/delete [post]
func (b *BaseApi) DeleteAgentAccount(c *gin.Context) {
var req dto.AgentAccountDeleteReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.DeleteAccount(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Get Agent Feishu channel config
// @Accept json
// @Param request body dto.AgentFeishuConfigReq true "request"
// @Success 200 {object} dto.AgentFeishuConfig
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/feishu/get [post]
func (b *BaseApi) GetAgentFeishuConfig(c *gin.Context) {
var req dto.AgentFeishuConfigReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := agentService.GetFeishuConfig(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags AI
// @Summary Update Agent Feishu channel config
// @Accept json
// @Param request body dto.AgentFeishuConfigUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/feishu/update [post]
func (b *BaseApi) UpdateAgentFeishuConfig(c *gin.Context) {
var req dto.AgentFeishuConfigUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateFeishuConfig(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Get Agent Telegram channel config
// @Accept json
// @Param request body dto.AgentTelegramConfigReq true "request"
// @Success 200 {object} dto.AgentTelegramConfig
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/telegram/get [post]
func (b *BaseApi) GetAgentTelegramConfig(c *gin.Context) {
var req dto.AgentTelegramConfigReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := agentService.GetTelegramConfig(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags AI
// @Summary Update Agent Telegram channel config
// @Accept json
// @Param request body dto.AgentTelegramConfigUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/telegram/update [post]
func (b *BaseApi) UpdateAgentTelegramConfig(c *gin.Context) {
var req dto.AgentTelegramConfigUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateTelegramConfig(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Get Agent Discord channel config
// @Accept json
// @Param request body dto.AgentDiscordConfigReq true "request"
// @Success 200 {object} dto.AgentDiscordConfig
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/discord/get [post]
func (b *BaseApi) GetAgentDiscordConfig(c *gin.Context) {
var req dto.AgentDiscordConfigReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := agentService.GetDiscordConfig(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags AI
// @Summary Update Agent Discord channel config
// @Accept json
// @Param request body dto.AgentDiscordConfigUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/discord/update [post]
func (b *BaseApi) UpdateAgentDiscordConfig(c *gin.Context) {
var req dto.AgentDiscordConfigUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateDiscordConfig(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Get Agent QQ Bot channel config
// @Accept json
// @Param request body dto.AgentWecomConfigReq true "request"
// @Success 200 {object} dto.AgentWecomConfig
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/wecom/get [post]
func (b *BaseApi) GetAgentWecomConfig(c *gin.Context) {
var req dto.AgentWecomConfigReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := agentService.GetWecomConfig(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags AI
// @Summary Update Agent WeCom channel config
// @Accept json
// @Param request body dto.AgentWecomConfigUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/wecom/update [post]
func (b *BaseApi) UpdateAgentWecomConfig(c *gin.Context) {
var req dto.AgentWecomConfigUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateWecomConfig(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Get Agent DingTalk channel config
// @Accept json
// @Param request body dto.AgentDingTalkConfigReq true "request"
// @Success 200 {object} dto.AgentDingTalkConfig
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/dingtalk/get [post]
func (b *BaseApi) GetAgentDingTalkConfig(c *gin.Context) {
var req dto.AgentDingTalkConfigReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := agentService.GetDingTalkConfig(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags AI
// @Summary Update Agent DingTalk channel config
// @Accept json
// @Param request body dto.AgentDingTalkConfigUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/dingtalk/update [post]
func (b *BaseApi) UpdateAgentDingTalkConfig(c *gin.Context) {
var req dto.AgentDingTalkConfigUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateDingTalkConfig(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Get Agent QQ Bot channel config
// @Accept json
// @Param request body dto.AgentQQBotConfigReq true "request"
// @Success 200 {object} dto.AgentQQBotConfig
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/qqbot/get [post]
func (b *BaseApi) GetAgentQQBotConfig(c *gin.Context) {
var req dto.AgentQQBotConfigReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := agentService.GetQQBotConfig(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags AI
// @Summary Update Agent QQ Bot channel config
// @Accept json
// @Param request body dto.AgentQQBotConfigUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/qqbot/update [post]
func (b *BaseApi) UpdateAgentQQBotConfig(c *gin.Context) {
var req dto.AgentQQBotConfigUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateQQBotConfig(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Install Agent plugin
// @Accept json
// @Param request body dto.AgentPluginInstallReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/plugin/install [post]
func (b *BaseApi) InstallAgentPlugin(c *gin.Context) {
var req dto.AgentPluginInstallReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.InstallPlugin(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Check Agent plugin installation status
// @Accept json
// @Param request body dto.AgentPluginCheckReq true "request"
// @Success 200 {object} dto.AgentPluginStatus
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/plugin/check [post]
func (b *BaseApi) CheckAgentPlugin(c *gin.Context) {
var req dto.AgentPluginCheckReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := agentService.CheckPlugin(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags AI
// @Summary Get Agent Security config
// @Accept json
// @Param request body dto.AgentSecurityConfigReq true "request"
// @Success 200 {object} dto.AgentSecurityConfig
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/security/get [post]
func (b *BaseApi) GetAgentSecurityConfig(c *gin.Context) {
var req dto.AgentSecurityConfigReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := agentService.GetSecurityConfig(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags AI
// @Summary Update Agent Security config
// @Accept json
// @Param request body dto.AgentSecurityConfigUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/security/update [post]
func (b *BaseApi) UpdateAgentSecurityConfig(c *gin.Context) {
var req dto.AgentSecurityConfigUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateSecurityConfig(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Get Agent Other config
// @Accept json
// @Param request body dto.AgentOtherConfigReq true "request"
// @Success 200 {object} dto.AgentOtherConfig
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/other/get [post]
func (b *BaseApi) GetAgentOtherConfig(c *gin.Context) {
var req dto.AgentOtherConfigReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := agentService.GetOtherConfig(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags AI
// @Summary Update Agent Other config
// @Accept json
// @Param request body dto.AgentOtherConfigUpdateReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/other/update [post]
func (b *BaseApi) UpdateAgentOtherConfig(c *gin.Context) {
var req dto.AgentOtherConfigUpdateReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.UpdateOtherConfig(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Approve Agent channel pairing code
// @Accept json
// @Param request body dto.AgentChannelPairingApproveReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/agents/channel/pairing/approve [post]
func (b *BaseApi) ApproveAgentChannelPairing(c *gin.Context) {
var req dto.AgentChannelPairingApproveReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := agentService.ApproveChannelPairing(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/ai.go
================================================
package v2
import (
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/1Panel-dev/1Panel/agent/utils/ai_tools/gpu"
"github.com/1Panel-dev/1Panel/agent/utils/ai_tools/gpu/common"
"github.com/1Panel-dev/1Panel/agent/utils/ai_tools/xpu"
"github.com/gin-gonic/gin"
)
// @Tags AI
// @Summary Create Ollama model
// @Accept json
// @Param request body dto.OllamaModelName true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/ollama/model [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"添加 Ollama 模型 [name]","formatEN":"add Ollama model [name]"}
func (b *BaseApi) CreateOllamaModel(c *gin.Context) {
var req dto.OllamaModelName
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := aiToolService.Create(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, nil)
}
// @Tags AI
// @Summary Rereate Ollama model
// @Accept json
// @Param request body dto.OllamaModelName true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/ollama/model/recreate [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"添加 Ollama 模型重试 [name]","formatEN":"re-add Ollama model [name]"}
func (b *BaseApi) RecreateOllamaModel(c *gin.Context) {
var req dto.OllamaModelName
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := aiToolService.Recreate(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, nil)
}
// @Tags AI
// @Summary Close Ollama model conn
// @Accept json
// @Param request body dto.OllamaModelName true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/ollama/close [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"关闭 Ollama 模型连接 [name]","formatEN":"close conn for Ollama model [name]"}
func (b *BaseApi) CloseOllamaModel(c *gin.Context) {
var req dto.OllamaModelName
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := aiToolService.Close(req.Name); err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, nil)
}
// @Tags AI
// @Summary Sync Ollama model list
// @Success 200 {array} dto.OllamaModelDropList
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/ollama/model/sync [post]
// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"同步 Ollama 模型列表","formatEN":"sync Ollama model list"}
func (b *BaseApi) SyncOllamaModel(c *gin.Context) {
list, err := aiToolService.Sync()
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags AI
// @Summary Page Ollama models
// @Accept json
// @Param request body dto.SearchWithPage true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/ollama/model/search [post]
func (b *BaseApi) SearchOllamaModel(c *gin.Context) {
var req dto.SearchWithPage
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := aiToolService.Search(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags AI
// @Summary Page Ollama models
// @Accept json
// @Param request body dto.OllamaModelName true "request"
// @Success 200 {string} details
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/ollama/model/load [post]
func (b *BaseApi) LoadOllamaModelDetail(c *gin.Context) {
var req dto.OllamaModelName
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
detail, err := aiToolService.LoadDetail(req.Name)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, detail)
}
// @Tags AI
// @Summary Delete Ollama model
// @Accept json
// @Param request body dto.ForceDelete true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/ollama/model/del [post]
// @x-panel-log {"bodyKeys":["ids"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"ids","isList":true,"db":"ollama_models","output_column":"name","output_value":"names"}],"formatZH":"删除 Ollama 模型 [names]","formatEN":"remove Ollama model [names]"}
func (b *BaseApi) DeleteOllamaModel(c *gin.Context) {
var req dto.ForceDelete
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := aiToolService.Delete(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Load gpu / xpu info
// @Accept json
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/gpu/load [get]
func (b *BaseApi) LoadGpuInfo(c *gin.Context) {
ok, client := gpu.New()
if ok {
info, err := client.LoadGpuInfo()
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, info)
return
}
xpuOK, xpuClient := xpu.New()
if xpuOK {
info, err := xpuClient.LoadGpuInfo()
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, info)
return
}
helper.SuccessWithData(c, &common.GpuInfo{})
}
// @Tags AI
// @Summary Bind domain
// @Accept json
// @Param request body dto.OllamaBindDomain true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/domain/bind [post]
func (b *BaseApi) BindDomain(c *gin.Context) {
var req dto.OllamaBindDomain
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := aiToolService.BindDomain(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags AI
// @Summary Get bind domain
// @Accept json
// @Param request body dto.OllamaBindDomainReq true "request"
// @Success 200 {object} dto.OllamaBindDomainRes
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /ai/domain/get [post]
func (b *BaseApi) GetBindDomain(c *gin.Context) {
var req dto.OllamaBindDomainReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
res, err := aiToolService.GetBindDomain(req)
if err != nil {
helper.BadRequest(c, err)
return
}
helper.SuccessWithData(c, res)
}
// Tags AI
// Summary Update bind domain
// Accept json
// Param request body dto.OllamaBindDomain true "request"
// Success 200
// Security ApiKeyAuth
// Security Timestamp
// Router /ai/domain/update [post]
func (b *BaseApi) UpdateBindDomain(c *gin.Context) {
var req dto.OllamaBindDomain
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := aiToolService.UpdateBindDomain(req); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/alert.go
================================================
package v2
import (
"errors"
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/gin-gonic/gin"
)
func (b *BaseApi) PageAlert(c *gin.Context) {
var req dto.AlertSearch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, alerts, err := alertService.PageAlert(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Total: total,
Items: alerts,
})
}
func (b *BaseApi) GetAlerts(c *gin.Context) {
alerts, err := alertService.GetAlerts()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, alerts)
}
func (b *BaseApi) CreateAlert(c *gin.Context) {
var req dto.AlertCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
err := alertService.CreateAlert(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
func (b *BaseApi) DeleteAlert(c *gin.Context) {
var req dto.DeleteRequest
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
err := alertService.DeleteAlert(req.ID)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
func (b *BaseApi) UpdateAlert(c *gin.Context) {
var req dto.AlertUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := alertService.UpdateAlert(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
func (b *BaseApi) GetAlert(c *gin.Context) {
id, err := helper.GetParamID(c)
if err != nil {
helper.BadRequest(c, errors.New("no such id in request param"))
return
}
alert, err := alertService.GetAlert(id)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, alert)
}
func (b *BaseApi) UpdateAlertStatus(c *gin.Context) {
var req dto.AlertUpdateStatus
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := alertService.UpdateStatus(req.ID, req.Status); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
func (b *BaseApi) GetDisks(c *gin.Context) {
alerts, err := alertService.GetDisks()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, alerts)
}
func (b *BaseApi) PageAlertLogs(c *gin.Context) {
var req dto.AlertLogSearch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, alertLogs, err := alertService.PageAlertLogs(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Total: total,
Items: alertLogs,
})
}
func (b *BaseApi) CleanAlertLogs(c *gin.Context) {
if err := alertService.CleanAlertLogs(); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
func (b *BaseApi) GetClams(c *gin.Context) {
clams, err := alertService.GetClams()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, clams)
}
func (b *BaseApi) GetCronJobs(c *gin.Context) {
var req dto.CronJobReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
cronJobs, err := alertService.GetCronJobs(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, cronJobs)
}
func (b *BaseApi) GetAlertConfig(c *gin.Context) {
config, err := alertService.GetAlertConfig()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, config)
}
func (b *BaseApi) UpdateAlertConfig(c *gin.Context) {
var req dto.AlertConfigUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := alertService.UpdateAlertConfig(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
func (b *BaseApi) DeleteAlertConfig(c *gin.Context) {
var req dto.DeleteRequest
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
err := alertService.DeleteAlertConfig(req.ID)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
func (b *BaseApi) TestAlertConfig(c *gin.Context) {
var req dto.AlertConfigTest
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
flag, err := alertService.TestAlertConfig(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, flag)
}
================================================
FILE: agent/app/api/v2/app.go
================================================
package v2
import (
"net/http"
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/1Panel-dev/1Panel/agent/app/dto/request"
"github.com/1Panel-dev/1Panel/agent/i18n"
"github.com/1Panel-dev/1Panel/agent/utils/appicon"
"github.com/gin-gonic/gin"
)
// @Tags App
// @Summary List apps
// @Accept json
// @Param request body request.AppSearch true "request"
// @Success 200 {object} response.AppRes
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/search [post]
func (b *BaseApi) SearchApp(c *gin.Context) {
var req request.AppSearch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
list, err := appService.PageApp(c, req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithDataGzipped(c, list)
}
// @Tags App
// @Summary Sync remote app list
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/sync/remote [post]
// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"应用商店同步","formatEN":"App store synchronization"}
func (b *BaseApi) SyncApp(c *gin.Context) {
var req dto.OperateWithTask
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
res, err := appService.GetAppUpdate()
if err != nil {
helper.InternalServer(c, err)
return
}
if !res.CanUpdate {
if res.IsSyncing {
helper.SuccessWithMsg(c, i18n.GetMsgByKey("AppStoreIsSyncing"))
} else {
helper.SuccessWithMsg(c, i18n.GetMsgByKey("AppStoreIsUpToDate"))
}
return
}
if err = appService.SyncAppListFromRemote(req.TaskID); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags App
// @Summary Sync local app list
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/sync/local [post]
// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"应用商店同步","formatEN":"App store synchronization"}
func (b *BaseApi) SyncLocalApp(c *gin.Context) {
var req dto.OperateWithTask
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
go appService.SyncAppListFromLocal(req.TaskID)
helper.Success(c)
}
// @Tags App
// @Summary Search app by key
// @Accept json
// @Param key path string true "app key"
// @Success 200 {object} response.AppDTO
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/:key [get]
func (b *BaseApi) GetApp(c *gin.Context) {
appKey, err := helper.GetStrParamByKey(c, "key")
if err != nil {
helper.BadRequest(c, err)
return
}
appDTO, err := appService.GetApp(c, appKey)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, appDTO)
}
// @Tags App
// @Summary Search app detail by appid
// @Accept json
// @Param appId path integer true "app id"
// @Param version path string true "app 版本"
// @Param version path string true "app 类型"
// @Success 200 {object} response.AppDetailDTO
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/detail/:appId/:version/:type [get]
func (b *BaseApi) GetAppDetail(c *gin.Context) {
appID, err := helper.GetIntParamByKey(c, "appId")
if err != nil {
helper.BadRequest(c, err)
return
}
version := c.Param("version")
appType := c.Param("type")
appDetailDTO, err := appService.GetAppDetail(appID, version, appType)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, appDetailDTO)
}
// @Tags App
// @Summary Get app detail by id
// @Accept json
// @Param appId path integer true "id"
// @Success 200 {object} response.AppDetailDTO
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/details/:id [get]
func (b *BaseApi) GetAppDetailByID(c *gin.Context) {
appDetailID, err := helper.GetIntParamByKey(c, "id")
if err != nil {
helper.BadRequest(c, err)
return
}
appDetailDTO, err := appService.GetAppDetailByID(appDetailID)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, appDetailDTO)
}
// @Tags App
// @Summary Install app
// @Accept json
// @Param request body request.AppInstallCreate true "request"
// @Success 200 {object} model.AppInstall
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/install [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"安装应用 [name]","formatEN":"Install app [name]"}
func (b *BaseApi) InstallApp(c *gin.Context) {
var req request.AppInstallCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
install, err := appService.Install(req, true)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, install)
}
func (b *BaseApi) GetAppTags(c *gin.Context) {
tags, err := appService.GetAppTags(c)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, tags)
}
// @Tags App
// @Summary Get app list update
// @Success 200 {object} response.AppUpdateRes
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/checkupdate [get]
func (b *BaseApi) GetAppListUpdate(c *gin.Context) {
res, err := appService.GetAppUpdate()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, res)
}
// @Tags App
// @Summary Get app icon by app_id
// @Accept json
// @Param appId path integer true "app id"
// @Success 200 {file} file "app icon"
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/icon/:key [get]
func (b *BaseApi) GetAppIcon(c *gin.Context) {
appKey, err := helper.GetStrParamByKey(c, "key")
if err != nil {
helper.BadRequest(c, err)
return
}
iconBytes, filename, etag, err := appService.GetAppIcon(appKey)
if err != nil {
helper.InternalServer(c, err)
return
}
if len(iconBytes) == 0 {
c.Status(http.StatusNoContent)
return
}
c.Header("Cache-Control", "public, max-age=2592000")
if etag != "" && filename != "" {
c.Header("ETag", etag)
if c.GetHeader("If-None-Match") == etag {
c.Status(http.StatusNotModified)
return
}
}
c.Data(http.StatusOK, appicon.ContentTypePNG, iconBytes)
}
// @Tags App
// @Summary Search app detail by appkey and version
// @Accept json
// @Param appId path integer true "app key"
// @Param version path string true "app version"
// @Success 200 {object} response.AppDetailSimpleDTO
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/detail/node/:appKey/:version [get]
func (b *BaseApi) GetAppDetailForNode(c *gin.Context) {
appKey := c.Param("appKey")
version := c.Param("version")
appDetailDTO, err := appService.GetAppDetailByKey(appKey, version)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, appDetailDTO)
}
================================================
FILE: agent/app/api/v2/app_ignore_upgrade.go
================================================
package v2
import (
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto/request"
"github.com/gin-gonic/gin"
)
// @Tags App
// @Summary List Upgrade Ignored App
// @Accept json
// @Success 200 {array} model.AppIgnoreUpgrade
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/ignored/detail [get]
func (b *BaseApi) ListAppIgnored(c *gin.Context) {
res, err := appIgnoreUpgradeService.List()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, res)
}
// @Tags App
// @Summary Ignore Upgrade App
// @Accept json
// @Param request body request.AppIgnoreUpgradeReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/ignore [post]
// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"忽略应用升级","formatEN":"Ignore application upgrade"}
func (b *BaseApi) IgnoreAppUpgrade(c *gin.Context) {
var req request.AppIgnoreUpgradeReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := appIgnoreUpgradeService.CreateAppIgnore(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// 写一个去掉忽略的接口
// @Tags App
// @Summary Cancel Ignore Upgrade App
// @Accept json
// @Param request body request.ReqWithID true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/ignored/cancel [post]
// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"取消忽略应用升级","formatEN":"Cancel ignore application upgrade"}
func (b *BaseApi) CancelIgnoreAppUpgrade(c *gin.Context) {
var req request.ReqWithID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := appIgnoreUpgradeService.Delete(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/app_install.go
================================================
package v2
import (
"github.com/1Panel-dev/1Panel/agent/app/dto/request"
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/gin-gonic/gin"
)
// @Tags App
// @Summary Page app installed
// @Accept json
// @Param request body request.AppInstalledSearch true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/search [post]
func (b *BaseApi) SearchAppInstalled(c *gin.Context) {
var req request.AppInstalledSearch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if req.All {
list, err := appInstallService.SearchForWebsite(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: int64(len(list)),
})
} else {
total, list, err := appInstallService.Page(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
}
// @Tags App
// @Summary List app installed
// @Accept json
// @Success 200 {array} dto.AppInstallInfo
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/list [get]
func (b *BaseApi) ListAppInstalled(c *gin.Context) {
list, err := appInstallService.GetInstallList()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags App
// @Summary Check app installed
// @Accept json
// @Param request body request.AppInstalledInfo true "request"
// @Success 200 {object} response.AppInstalledCheck
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/check [post]
func (b *BaseApi) CheckAppInstalled(c *gin.Context) {
var req request.AppInstalledInfo
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
checkData, err := appInstallService.CheckExist(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, checkData)
}
// @Tags App
// @Summary Search app port by key
// @Accept json
// @Param request body dto.OperationWithNameAndType true "request"
// @Success 200 {integer} port
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/loadport [post]
func (b *BaseApi) LoadPort(c *gin.Context) {
var req dto.OperationWithNameAndType
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
port, err := appInstallService.LoadPort(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, port)
}
// @Tags App
// @Summary Search app password by key
// @Accept json
// @Param request body dto.OperationWithNameAndType true "request"
// @Success 200 {object} response.DatabaseConn
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/conninfo [post]
func (b *BaseApi) LoadConnInfo(c *gin.Context) {
var req dto.OperationWithNameAndType
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
conn, err := appInstallService.LoadConnInfo(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, conn)
}
// @Tags App
// @Summary Check before delete
// @Accept json
// @Param appInstallId path integer true "App install id"
// @Success 200 {array} dto.AppResource
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/delete/check/:appInstallId [get]
func (b *BaseApi) DeleteCheck(c *gin.Context) {
appInstallId, err := helper.GetIntParamByKey(c, "appInstallId")
if err != nil {
helper.BadRequest(c, err)
return
}
checkData, err := appInstallService.DeleteCheck(appInstallId)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, checkData)
}
// Sync app installed
// @Tags App
// @Summary Sync app installed
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/sync [post]
// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"同步已安装应用列表","formatEN":"Sync the list of installed apps"}
func (b *BaseApi) SyncInstalled(c *gin.Context) {
if err := appInstallService.SyncAll(false); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags App
// @Summary Operate installed app
// @Accept json
// @Param request body request.AppInstalledOperate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/op [post]
// @x-panel-log {"bodyKeys":["installId","operate"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"installId","isList":false,"db":"app_installs","output_column":"app_id","output_value":"appId"},{"input_column":"id","input_value":"installId","isList":false,"db":"app_installs","output_column":"name","output_value":"appName"},{"input_column":"id","input_value":"appId","isList":false,"db":"apps","output_column":"key","output_value":"appKey"}],"formatZH":"[operate] 应用 [appKey][appName]","formatEN":"[operate] App [appKey][appName]"}
func (b *BaseApi) OperateInstalled(c *gin.Context) {
var req request.AppInstalledOperate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := appInstallService.Operate(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags App
// @Summary Search app service by key
// @Accept json
// @Param key path string true "request"
// @Success 200 {array} response.AppService
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/services/:key [get]
func (b *BaseApi) GetServices(c *gin.Context) {
key := c.Param("key")
services, err := appInstallService.GetServices(key)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, services)
}
// @Tags App
// @Summary Search app update version by install id
// @Accept json
// @Param appInstallId path integer true "request"
// @Success 200 {array} dto.AppVersion
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/update/versions [post]
func (b *BaseApi) GetUpdateVersions(c *gin.Context) {
var req request.AppUpdateVersion
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
versions, err := appInstallService.GetUpdateVersions(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, versions)
}
// @Tags App
// @Summary Change app port
// @Accept json
// @Param request body request.PortUpdate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/port/change [post]
// @x-panel-log {"bodyKeys":["key","name","port"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"应用端口修改 [key]-[name] => [port]","formatEN":"Application port update [key]-[name] => [port]"}
func (b *BaseApi) ChangeAppPort(c *gin.Context) {
var req request.PortUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := appInstallService.ChangeAppPort(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags App
// @Summary Search default config by key
// @Accept json
// @Param request body dto.OperationWithNameAndType true "request"
// @Success 200 {string} content
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/conf [post]
func (b *BaseApi) GetDefaultConfig(c *gin.Context) {
var req dto.OperationWithNameAndType
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
content, err := appInstallService.GetDefaultConfigByKey(req.Type, req.Name)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, content)
}
// @Tags App
// @Summary Search params by appInstallId
// @Accept json
// @Param appInstallId path string true "request"
// @Success 200 {object} response.AppConfig
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/params/:appInstallId [get]
func (b *BaseApi) GetParams(c *gin.Context) {
appInstallId, err := helper.GetIntParamByKey(c, "appInstallId")
if err != nil {
helper.BadRequest(c, err)
return
}
content, err := appInstallService.GetParams(appInstallId)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, content)
}
// @Tags App
// @Summary Change app params
// @Accept json
// @Param request body request.AppInstalledUpdate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/params/update [post]
// @x-panel-log {"bodyKeys":["installId"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"installId","isList":false,"db":"app_installs","output_column":"name","output_value":"name"}],"formatZH":"应用参数修改 [name]","formatEN":"Application param update [name]"}
func (b *BaseApi) UpdateInstalled(c *gin.Context) {
var req request.AppInstalledUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := appInstallService.Update(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags App
// @Summary Update app config
// @Accept json
// @Param request body request.AppConfigUpdate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/config/update [post]
// @x-panel-log {"bodyKeys":["installID","webUI"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"应用配置更新 [installID]","formatEN":"Application config update [installID]"}
func (b *BaseApi) UpdateAppConfig(c *gin.Context) {
var req request.AppConfigUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := appInstallService.UpdateAppConfig(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags App
// @Summary Get app install info
// @Accept json
// @Param appInstallId path integer true "App install id"
// @Success 200 {object} dto.AppInstallInfo
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /apps/installed/info/:appInstallId [get]
func (b *BaseApi) GetAppInstallInfo(c *gin.Context) {
appInstallId, err := helper.GetIntParamByKey(c, "appInstallId")
if err != nil {
helper.BadRequest(c, err)
return
}
info, err := appInstallService.GetAppInstallInfo(appInstallId)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, info)
}
func (b *BaseApi) UpdateAppInstallSort(c *gin.Context) {
var req request.AppInstallSort
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := appInstallService.UpdateSort(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/backup.go
================================================
package v2
import (
"fmt"
"path"
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/1Panel-dev/1Panel/agent/constant"
"github.com/gin-gonic/gin"
)
func (b *BaseApi) CheckBackupUsed(c *gin.Context) {
name, err := helper.GetStrParamByKey(c, "name")
if err != nil {
helper.BadRequest(c, err)
return
}
if err := backupService.CheckUsed(name, true); err != nil {
helper.BadRequest(c, err)
return
}
helper.Success(c)
}
// @Tags Backup Account
// @Summary Check backup account
// @Accept json
// @Param request body dto.BackupOperate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/check [post]
func (b *BaseApi) CheckBackup(c *gin.Context) {
var req dto.BackupOperate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
helper.SuccessWithData(c, backupService.CheckConn(req))
}
// @Tags Backup Account
// @Summary Create backup account
// @Accept json
// @Param request body dto.BackupOperate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups [post]
// @x-panel-log {"bodyKeys":["type"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"创建备份账号 [type]","formatEN":"create backup account [type]"}
func (b *BaseApi) CreateBackup(c *gin.Context) {
var req dto.BackupOperate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := backupService.Create(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Backup Account
// @Summary Refresh token
// @Accept json
// @Param request body dto.BackupOperate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/refresh/token [post]
func (b *BaseApi) RefreshToken(c *gin.Context) {
var req dto.OperateByID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := backupService.RefreshToken(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Backup Account
// @Summary List buckets
// @Accept json
// @Param request body dto.ForBuckets true "request"
// @Success 200 {array} object
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/buckets [post]
func (b *BaseApi) ListBuckets(c *gin.Context) {
var req dto.ForBuckets
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
buckets, err := backupService.GetBuckets(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, buckets)
}
// @Tags Backup Account
// @Summary Delete backup account
// @Accept json
// @Param request body dto.OperateByID true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/del [post]
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":false,"db":"backup_accounts","output_column":"type","output_value":"types"}],"formatZH":"删除备份账号 [types]","formatEN":"delete backup account [types]"}
func (b *BaseApi) DeleteBackup(c *gin.Context) {
var req dto.OperateByID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := backupService.Delete(req.ID); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Backup Account
// @Summary Update backup account
// @Accept json
// @Param request body dto.BackupOperate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/update [post]
// @x-panel-log {"bodyKeys":["type"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"更新备份账号 [types]","formatEN":"update backup account [types]"}
func (b *BaseApi) UpdateBackup(c *gin.Context) {
var req dto.BackupOperate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := backupService.Update(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Backup Account
// @Summary Upload file for recover
// @Accept json
// @Param request body dto.UploadForRecover true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/upload [post]
// @x-panel-log {"bodyKeys":["filePath"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"上传备份文件 [filePath]","formatEN":"upload backup file [filePath]"}
func (b *BaseApi) UploadForRecover(c *gin.Context) {
var req dto.UploadForRecover
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := backupService.UploadForRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Backup Account
// @Summary Load backup account options
// @Accept json
// @Success 200 {array} dto.BackupOption
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/options [get]
func (b *BaseApi) LoadBackupOptions(c *gin.Context) {
list, err := backupService.LoadBackupOptions()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags Backup Account
// @Summary Search backup accounts with page
// @Accept json
// @Param request body dto.SearchPageWithType true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/search [post]
func (b *BaseApi) SearchBackup(c *gin.Context) {
var req dto.SearchPageWithType
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := backupService.SearchWithPage(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Backup Account
// @Summary get local backup dir
// @Success 200 {string} dir
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/local [get]
func (b *BaseApi) GetLocalDir(c *gin.Context) {
dir, err := backupService.GetLocalDir()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dir)
}
// @Tags Backup Account
// @Summary Load backup record size
// @Accept json
// @Param request body dto.SearchForSize true "request"
// @Success 200 {array} dto.RecordFileSize
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/record/size [post]
func (b *BaseApi) LoadBackupRecordSize(c *gin.Context) {
var req dto.SearchForSize
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
list, err := backupRecordService.LoadRecordSize(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags Backup Account
// @Summary Page backup records
// @Accept json
// @Param request body dto.RecordSearch true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/record/search [post]
func (b *BaseApi) SearchBackupRecords(c *gin.Context) {
var req dto.RecordSearch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := backupRecordService.SearchRecordsWithPage(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Backup Account
// @Summary Page backup records by cronjob
// @Accept json
// @Param request body dto.RecordSearchByCronjob true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/record/search/bycronjob [post]
func (b *BaseApi) SearchBackupRecordsByCronjob(c *gin.Context) {
var req dto.RecordSearchByCronjob
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := backupRecordService.SearchRecordsByCronjobWithPage(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Backup Account
// @Summary Download backup record
// @Accept json
// @Param request body dto.DownloadRecord true "request"
// @Success 200 {string} filePath
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/record/download [post]
// @x-panel-log {"bodyKeys":["source","fileName"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"下载备份记录 [source][fileName]","formatEN":"download backup records [source][fileName]"}
func (b *BaseApi) DownloadRecord(c *gin.Context) {
var req dto.DownloadRecord
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
filePath, err := backupRecordService.DownloadRecord(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, filePath)
}
// @Tags Backup Account
// @Summary Update backup record description
// @Accept json
// @Param request body dto.UpdateDescription true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/record/description/update [post]
func (b *BaseApi) UpdateRecordDescription(c *gin.Context) {
var req dto.UpdateDescription
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := backupRecordService.UpdateDescription(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Backup Account
// @Summary Delete backup record
// @Accept json
// @Param request body dto.BatchDeleteReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/record/del [post]
// @x-panel-log {"bodyKeys":["ids"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"ids","isList":true,"db":"backup_records","output_column":"file_name","output_value":"files"}],"formatZH":"删除备份记录 [files]","formatEN":"delete backup records [files]"}
func (b *BaseApi) DeleteBackupRecord(c *gin.Context) {
var req dto.BatchDeleteReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := backupRecordService.BatchDeleteRecord(req.Ids); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Backup Account
// @Summary List files from backup accounts
// @Accept json
// @Param request body dto.OperateByID true "request"
// @Success 200 {array} string
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/search/files [post]
func (b *BaseApi) LoadFilesFromBackup(c *gin.Context) {
var req dto.OperateByID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data := backupRecordService.ListFiles(req)
helper.SuccessWithData(c, data)
}
// @Tags Backup Account
// @Summary Backup system data
// @Accept json
// @Param request body dto.CommonBackup true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/backup [post]
// @x-panel-log {"bodyKeys":["type","name","detailName"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"备份 [type] 数据 [name][detailName]","formatEN":"backup [type] data [name][detailName]"}
func (b *BaseApi) Backup(c *gin.Context) {
var req dto.CommonBackup
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
switch req.Type {
case "app":
if _, err := backupService.AppBackup(req); err != nil {
helper.InternalServer(c, err)
return
}
case "mysql", "mariadb", constant.AppMysqlCluster:
if err := backupService.MysqlBackup(req); err != nil {
helper.InternalServer(c, err)
return
}
case constant.AppPostgresql, constant.AppPostgresqlCluster:
if err := backupService.PostgresqlBackup(req); err != nil {
helper.InternalServer(c, err)
return
}
case "website":
if err := backupService.WebsiteBackup(req); err != nil {
helper.InternalServer(c, err)
return
}
case "redis", constant.AppRedisCluster:
if err := backupService.RedisBackup(req); err != nil {
helper.InternalServer(c, err)
return
}
case "container":
if err := backupService.ContainerBackup(req); err != nil {
helper.InternalServer(c, err)
return
}
case "compose":
if err := backupService.ComposeBackup(req); err != nil {
helper.InternalServer(c, err)
return
}
}
helper.Success(c)
}
// @Tags Backup Account
// @Summary Recover system data
// @Accept json
// @Param request body dto.CommonRecover true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/recover [post]
// @x-panel-log {"bodyKeys":["type","name","detailName","file"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"从 [file] 恢复 [type] 数据 [name][detailName]","formatEN":"recover [type] data [name][detailName] from [file]"}
func (b *BaseApi) Recover(c *gin.Context) {
var req dto.CommonRecover
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
downloadPath, err := backupRecordService.DownloadRecord(dto.DownloadRecord{
DownloadAccountID: req.DownloadAccountID,
FileDir: path.Dir(req.File),
FileName: path.Base(req.File),
})
if err != nil {
helper.BadRequest(c, fmt.Errorf("download file failed, err: %v", err))
return
}
req.File = downloadPath
switch req.Type {
case "mysql", "mariadb", constant.AppMysqlCluster:
if err := backupService.MysqlRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
case constant.AppPostgresql, constant.AppPostgresqlCluster:
if err := backupService.PostgresqlRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
case "website":
if err := backupService.WebsiteRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
case "redis", constant.AppRedisCluster:
if err := backupService.RedisRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
case "app":
if err := backupService.AppRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
case "container":
if err := backupService.ContainerRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
case "compose":
if err := backupService.ComposeRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
}
helper.Success(c)
}
// @Tags Backup Account
// @Summary Recover system data by upload
// @Accept json
// @Param request body dto.CommonRecover true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /backups/recover/byupload [post]
// @x-panel-log {"bodyKeys":["type","name","detailName","file"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"从 [file] 恢复 [type] 数据 [name][detailName]","formatEN":"recover [type] data [name][detailName] from [file]"}
func (b *BaseApi) RecoverByUpload(c *gin.Context) {
var req dto.CommonRecover
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
switch req.Type {
case "mysql", "mariadb", constant.AppMysqlCluster:
if err := backupService.MysqlRecoverByUpload(req); err != nil {
helper.InternalServer(c, err)
return
}
case constant.AppPostgresql, constant.AppPostgresqlCluster:
if err := backupService.PostgresqlRecoverByUpload(req); err != nil {
helper.InternalServer(c, err)
return
}
case "app":
if err := backupService.AppRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
case "website":
if err := backupService.WebsiteRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
case "container":
if err := backupService.ContainerRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
case "compose":
if err := backupService.ComposeRecover(req); err != nil {
helper.InternalServer(c, err)
return
}
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/clam.go
================================================
package v2
import (
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/gin-gonic/gin"
)
// @Tags Clam
// @Summary Create clam
// @Accept json
// @Param request body dto.ClamCreate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam [post]
// @x-panel-log {"bodyKeys":["name","path"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"创建扫描规则 [name][path]","formatEN":"create clam [name][path]"}
func (b *BaseApi) CreateClam(c *gin.Context) {
var req dto.ClamCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := clamService.Create(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Clam
// @Summary Update clam
// @Accept json
// @Param request body dto.ClamUpdate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/update [post]
// @x-panel-log {"bodyKeys":["name","path"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"修改扫描规则 [name][path]","formatEN":"update clam [name][path]"}
func (b *BaseApi) UpdateClam(c *gin.Context) {
var req dto.ClamUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := clamService.Update(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Clam
// @Summary Update clam status
// @Accept json
// @Param request body dto.ClamUpdateStatus true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/status/update [post]
// @x-panel-log {"bodyKeys":["id","status"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":false,"db":"clams","output_column":"name","output_value":"name"}],"formatZH":"修改扫描规则 [name] 状态为 [status]","formatEN":"change the status of clam [name] to [status]."}
func (b *BaseApi) UpdateClamStatus(c *gin.Context) {
var req dto.ClamUpdateStatus
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := clamService.UpdateStatus(req.ID, req.Status); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Clam
// @Summary Page clam
// @Accept json
// @Param request body dto.SearchClamWithPage true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/search [post]
func (b *BaseApi) SearchClam(c *gin.Context) {
var req dto.SearchClamWithPage
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := clamService.SearchWithPage(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Clam
// @Summary Load clam base info
// @Accept json
// @Success 200 {object} dto.ClamBaseInfo
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/base [post]
func (b *BaseApi) LoadClamBaseInfo(c *gin.Context) {
info, err := clamService.LoadBaseInfo()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, info)
}
// @Tags Clam
// @Summary Operate Clam
// @Accept json
// @Success 200
// @Param request body dto.Operate true "request"
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/operate [post]
// @x-panel-log {"bodyKeys":["operation"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"[operation] Clam","formatEN":"[operation] FTP"}
func (b *BaseApi) OperateClam(c *gin.Context) {
var req dto.Operate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := clamService.Operate(req.Operation); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Clam
// @Summary Clean clam record
// @Accept json
// @Param request body dto.OperateByID true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/record/clean [post]
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":true,"db":"clams","output_column":"name","output_value":"name"}],"formatZH":"清空扫描报告 [name]","formatEN":"clean clam record [name]"}
func (b *BaseApi) CleanClamRecord(c *gin.Context) {
var req dto.OperateByID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := clamService.CleanRecord(req.ID); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Clam
// @Summary Page clam record
// @Accept json
// @Param request body dto.ClamLogSearch true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/record/search [post]
func (b *BaseApi) SearchClamRecord(c *gin.Context) {
var req dto.ClamLogSearch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := clamService.SearchRecords(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Clam
// @Summary Load clam file
// @Accept json
// @Param request body dto.ClamFileReq true "request"
// @Success 200 {string} content
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/file/search [post]
func (b *BaseApi) SearchClamFile(c *gin.Context) {
var req dto.ClamFileReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
content, err := clamService.LoadFile(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, content)
}
// @Tags Clam
// @Summary Update clam file
// @Accept json
// @Param request body dto.UpdateByNameAndFile true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/file/update [post]
func (b *BaseApi) UpdateFile(c *gin.Context) {
var req dto.UpdateByNameAndFile
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := clamService.UpdateFile(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Clam
// @Summary Delete clam
// @Accept json
// @Param request body dto.ClamDelete true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/del [post]
// @x-panel-log {"bodyKeys":["ids"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"ids","isList":true,"db":"clams","output_column":"name","output_value":"names"}],"formatZH":"删除扫描规则 [names]","formatEN":"delete clam [names]"}
func (b *BaseApi) DeleteClam(c *gin.Context) {
var req dto.ClamDelete
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := clamService.Delete(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Clam
// @Summary Handle clam scan
// @Accept json
// @Param request body dto.OperateByID true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /toolbox/clam/handle [post]
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":true,"db":"clams","output_column":"name","output_value":"name"}],"formatZH":"执行病毒扫描 [name]","formatEN":"handle clam scan [name]"}
func (b *BaseApi) HandleClamScan(c *gin.Context) {
var req dto.OperateByID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := clamService.HandleOnce(req.ID); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/compose_template.go
================================================
package v2
import (
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/gin-gonic/gin"
)
// @Tags Container Compose-template
// @Summary Create compose template
// @Accept json
// @Param request body dto.ComposeTemplateCreate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/template [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"创建 compose 模版 [name]","formatEN":"create compose template [name]"}
func (b *BaseApi) CreateComposeTemplate(c *gin.Context) {
var req dto.ComposeTemplateCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := composeTemplateService.Create(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container Compose-template
// @Summary Bacth compose template
// @Accept json
// @Param request body dto.ComposeTemplateBatch true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/template/batch [post]
// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"批量导入编排模版","formatEN":"batch import compose templates"}
func (b *BaseApi) BatchComposeTemplate(c *gin.Context) {
var req dto.ComposeTemplateBatch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := composeTemplateService.Batch(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container Compose-template
// @Summary Page compose templates
// @Accept json
// @Param request body dto.SearchWithPage true "request"
// @Produce json
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/template/search [post]
func (b *BaseApi) SearchComposeTemplate(c *gin.Context) {
var req dto.SearchWithPage
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := composeTemplateService.SearchWithPage(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Container Compose-template
// @Summary List compose templates
// @Produce json
// @Success 200 {array} dto.ComposeTemplateInfo
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/template [get]
func (b *BaseApi) ListComposeTemplate(c *gin.Context) {
list, err := composeTemplateService.List()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags Container Compose-template
// @Summary Delete compose template
// @Accept json
// @Param request body dto.BatchDelete true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/template/del [post]
// @x-panel-log {"bodyKeys":["ids"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"ids","isList":true,"db":"compose_templates","output_column":"name","output_value":"names"}],"formatZH":"删除 compose 模版 [names]","formatEN":"delete compose template [names]"}
func (b *BaseApi) DeleteComposeTemplate(c *gin.Context) {
var req dto.BatchDeleteReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := composeTemplateService.Delete(req.Ids); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container Compose-template
// @Summary Update compose template
// @Accept json
// @Param request body dto.ComposeTemplateUpdate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/template/update [post]
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":false,"db":"compose_templates","output_column":"name","output_value":"name"}],"formatZH":"更新 compose 模版 [name]","formatEN":"update compose template information [name]"}
func (b *BaseApi) UpdateComposeTemplate(c *gin.Context) {
var req dto.ComposeTemplateUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
upMap := make(map[string]interface{})
upMap["content"] = req.Content
upMap["description"] = req.Description
if err := composeTemplateService.Update(req.ID, upMap); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/container.go
================================================
package v2
import (
"net/http"
"net/url"
"path"
"strconv"
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/gin-gonic/gin"
"github.com/pkg/errors"
)
// @Tags Container
// @Summary Page containers
// @Accept json
// @Param request body dto.PageContainer true "request"
// @Produce json
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/search [post]
func (b *BaseApi) SearchContainer(c *gin.Context) {
var req dto.PageContainer
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := containerService.Page(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Container
// @Summary Load container users
// @Accept json
// @Param request body dto.OperationWithName true "request"
// @Produce json
// @Success 200 {array} string
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/users [post]
func (b *BaseApi) LoadContainerUsers(c *gin.Context) {
var req dto.OperationWithName
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
helper.SuccessWithData(c, containerService.LoadUsers(req))
}
// @Tags Container
// @Summary List container files
// @Accept json
// @Param request body dto.ContainerFileReq true "request"
// @Success 200 {array} dto.ContainerFileInfo
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/files/search [post]
func (b *BaseApi) ListContainerFiles(c *gin.Context) {
var req dto.ContainerFileReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
files, err := containerService.ListContainerFiles(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, files)
}
// @Tags Container
// @Summary Upload container file
// @Accept multipart/form-data
// @Param containerID formData string true "containerID"
// @Param path formData string true "path"
// @Param file formData file true "file"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/files/upload [post]
// @x-panel-log {"bodyKeys":["containerID","path"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"容器 [containerID] 上传文件到 [path]","formatEN":"Upload file to [path] in container [containerID]"}
func (b *BaseApi) UploadContainerFile(c *gin.Context) {
form, err := c.MultipartForm()
if err != nil {
helper.BadRequest(c, err)
return
}
containerIDs := form.Value["containerID"]
paths := form.Value["path"]
uploadFiles := form.File["file"]
if len(containerIDs) == 0 || len(paths) == 0 || len(uploadFiles) == 0 {
helper.BadRequest(c, errors.New("invalid container file upload params"))
return
}
req := dto.ContainerFileReq{
ContainerID: containerIDs[0],
Path: paths[0],
}
for _, uploadFile := range uploadFiles {
file, err := uploadFile.Open()
if err != nil {
helper.InternalServer(c, err)
return
}
err = containerService.UploadContainerFile(req, path.Base(uploadFile.Filename), uploadFile.Size, file)
_ = file.Close()
if err != nil {
helper.InternalServer(c, err)
return
}
}
helper.Success(c)
}
// @Tags Container
// @Summary Get container file content
// @Accept json
// @Param request body dto.ContainerFileReq true "request"
// @Success 200 {object} dto.ContainerFileContent
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/files/content [post]
func (b *BaseApi) GetContainerFileContent(c *gin.Context) {
var req dto.ContainerFileReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
content, err := containerService.GetContainerFileContent(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, content)
}
// @Tags Container
// @Summary Get container file size
// @Accept json
// @Param request body dto.ContainerFileReq true "request"
// @Success 200 {int} size
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/files/size [post]
func (b *BaseApi) GetContainerFileSize(c *gin.Context) {
var req dto.ContainerFileReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
size, err := containerService.GetContainerFileSize(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, size)
}
// @Tags Container
// @Summary Delete container file
// @Accept json
// @Param request body dto.ContainerFileBatchDeleteReq true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/files/del [post]
// @x-panel-log {"bodyKeys":["containerID","paths"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"删除容器 [containerID] 文件 [paths]","formatEN":"Delete files [paths] in container [containerID]"}
func (b *BaseApi) DeleteContainerFile(c *gin.Context) {
var req dto.ContainerFileBatchDeleteReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.DeleteContainerFile(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Download container file
// @Accept json
// @Param request body dto.ContainerFileReq true "request"
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/files/download [post]
// @x-panel-log {"bodyKeys":["containerID","path"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"下载容器 [containerID] 文件 [path]","formatEN":"Download file [path] from container [containerID]"}
func (b *BaseApi) DownloadContainerFile(c *gin.Context) {
var req dto.ContainerFileReq
if err := c.ShouldBindJSON(&req); err != nil {
helper.BadRequest(c, err)
return
}
if req.ContainerID == "" || req.Path == "" {
helper.BadRequest(c, errors.New("invalid container file download params"))
return
}
reader, fileName, contentType, err := containerService.DownloadContainerFile(req)
if err != nil {
helper.InternalServer(c, err)
return
}
defer reader.Close()
c.Header("Content-Disposition", "attachment; filename*=utf-8''"+url.PathEscape(fileName))
c.DataFromReader(http.StatusOK, -1, contentType, reader, nil)
}
// @Tags Container
// @Summary List containers
// @Accept json
// @Produce json
// @Success 200 {array} dto.ContainerOptions
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/list [post]
func (b *BaseApi) ListContainer(c *gin.Context) {
helper.SuccessWithData(c, containerService.List())
}
// @Tags Container
// @Summary List containers by image
// @Accept json
// @Produce json
// @Success 200 {array} dto.ContainerOptions
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/list/byimage [post]
func (b *BaseApi) ListContainerByImage(c *gin.Context) {
var req dto.OperationWithName
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
helper.SuccessWithData(c, containerService.ListByImage(req.Name))
}
// @Tags Container
// @Summary Load containers status
// @Accept json
// @Produce json
// @Success 200 {object} dto.ContainerStatus
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/status [get]
func (b *BaseApi) LoadContainerStatus(c *gin.Context) {
data, err := containerService.LoadStatus()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags Container Compose
// @Summary Page composes
// @Accept json
// @Param request body dto.SearchWithPage true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/compose/search [post]
func (b *BaseApi) SearchCompose(c *gin.Context) {
var req dto.SearchWithPage
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := containerService.PageCompose(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Container Compose
// @Summary Test compose
// @Accept json
// @Param request body dto.ComposeCreate true "request"
// @Success 200 {boolean} isOK
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/compose/test [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"检测 compose [name] 格式","formatEN":"check compose [name]"}
func (b *BaseApi) TestCompose(c *gin.Context) {
var req dto.ComposeCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
isOK, err := containerService.TestCompose(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, isOK)
}
// @Tags Container Compose
// @Summary Create compose
// @Accept json
// @Param request body dto.ComposeCreate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/compose [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"创建 compose [name]","formatEN":"create compose [name]"}
func (b *BaseApi) CreateCompose(c *gin.Context) {
var req dto.ComposeCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.CreateCompose(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container Compose
// @Summary Operate compose
// @Accept json
// @Param request body dto.ComposeOperation true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/compose/operate [post]
// @x-panel-log {"bodyKeys":["name","operation"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"compose [operation] [name]","formatEN":"compose [operation] [name]"}
func (b *BaseApi) OperatorCompose(c *gin.Context) {
var req dto.ComposeOperation
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.ComposeOperation(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Update container
// @Accept json
// @Param request body dto.ContainerOperate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/update [post]
// @x-panel-log {"bodyKeys":["name","image"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"更新容器 [name][image]","formatEN":"update container [name][image]"}
func (b *BaseApi) ContainerUpdate(c *gin.Context) {
var req dto.ContainerOperate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.ContainerUpdate(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Load container info
// @Accept json
// @Param request body dto.OperationWithName true "request"
// @Success 200 {object} dto.ContainerOperate
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/info [post]
func (b *BaseApi) ContainerInfo(c *gin.Context) {
var req dto.OperationWithName
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := containerService.ContainerInfo(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Summary Load container limits
// @Success 200 {object} dto.ResourceLimit
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/limit [get]
func (b *BaseApi) LoadResourceLimit(c *gin.Context) {
data, err := containerService.LoadResourceLimit()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Summary Load container stats
// @Success 200 {array} dto.ContainerListStats
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/list/stats [get]
func (b *BaseApi) ContainerListStats(c *gin.Context) {
data, err := containerService.ContainerListStats()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Summary Load container stats size
// @Accept json
// @Param request body dto.OperationWithName true "request"
// @Success 200 {object} dto.ContainerItemStats
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/item/stats [post]
func (b *BaseApi) ContainerItemStats(c *gin.Context) {
var req dto.OperationWithName
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := containerService.ContainerItemStats(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags Container
// @Summary Create container
// @Accept json
// @Param request body dto.ContainerOperate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers [post]
// @x-panel-log {"bodyKeys":["name","image"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"创建容器 [name][image]","formatEN":"create container [name][image]"}
func (b *BaseApi) ContainerCreate(c *gin.Context) {
var req dto.ContainerOperate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.ContainerCreate(req, true); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Upgrade container
// @Accept json
// @Param request body dto.ContainerUpgrade true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/upgrade [post]
// @x-panel-log {"bodyKeys":["names","image"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"更新容器镜像 [names][image]","formatEN":"upgrade container image [names][image]"}
func (b *BaseApi) ContainerUpgrade(c *gin.Context) {
var req dto.ContainerUpgrade
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.ContainerUpgrade(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Clean container
// @Accept json
// @Param request body dto.ContainerPrune true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/prune [post]
// @x-panel-log {"bodyKeys":["pruneType"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"清理容器 [pruneType]","formatEN":"clean container [pruneType]"}
func (b *BaseApi) ContainerPrune(c *gin.Context) {
var req dto.ContainerPrune
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.Prune(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Clean container log
// @Accept json
// @Param request body dto.OperationWithName true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/clean/log [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"清理容器 [name] 日志","formatEN":"clean container [name] logs"}
func (b *BaseApi) CleanContainerLog(c *gin.Context) {
var req dto.OperationWithName
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.ContainerLogClean(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Clean compose log
// @Accept json
// @Param request body dto.ComposeLogClean true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/compose/clean/log [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"清理容器编排 [name] 日志","formatEN":"clean compose [name] logs"}
func (b *BaseApi) CleanComposeLog(c *gin.Context) {
var req dto.ComposeLogClean
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.ComposeLogClean(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Rename Container
// @Accept json
// @Param request body dto.ContainerRename true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/rename [post]
// @x-panel-log {"bodyKeys":["name","newName"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"容器重命名 [name] => [newName]","formatEN":"rename container [name] => [newName]"}
func (b *BaseApi) ContainerRename(c *gin.Context) {
var req dto.ContainerRename
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.ContainerRename(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Commit Container
// @Accept json
// @Param request body dto.ContainerCommit true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/commit [post]
func (b *BaseApi) ContainerCommit(c *gin.Context) {
var req dto.ContainerCommit
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.ContainerCommit(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Operate Container
// @Accept json
// @Param request body dto.ContainerOperation true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/operate [post]
// @x-panel-log {"bodyKeys":["names","operation"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"容器 [names] 执行 [operation]","formatEN":"container [operation] [names]"}
func (b *BaseApi) ContainerOperation(c *gin.Context) {
var req dto.ContainerOperation
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.ContainerOperation(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Container stats
// @Param id path string true "容器id"
// @Success 200 {object} dto.ContainerStats
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/stats/:id [get]
func (b *BaseApi) ContainerStats(c *gin.Context) {
containerID, ok := c.Params.Get("id")
if !ok {
helper.BadRequest(c, errors.New("error container id in path"))
return
}
result, err := containerService.ContainerStats(containerID)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, result)
}
// @Tags Container
// @Summary Container inspect
// @Accept json
// @Param request body dto.InspectReq true "request"
// @Success 200 {string} result
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/inspect [post]
func (b *BaseApi) Inspect(c *gin.Context) {
var req dto.InspectReq
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
result, err := containerService.Inspect(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, result)
}
func (b *BaseApi) DownloadContainerLogs(c *gin.Context) {
var req dto.ContainerLog
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
err := containerService.DownloadContainerLogs(req.ContainerType, req.Container, req.Since, strconv.Itoa(int(req.Tail)), req.Timestamp, c)
if err != nil {
helper.InternalServer(c, err)
}
}
// @Tags Container Network
// @Summary Page networks
// @Accept json
// @Param request body dto.SearchWithPage true "request"
// @Produce json
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/network/search [post]
func (b *BaseApi) SearchNetwork(c *gin.Context) {
var req dto.SearchWithPage
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := containerService.PageNetwork(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Container Network
// @Summary List networks
// @Accept json
// @Produce json
// @Success 200 {array} dto.Options
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/network [get]
func (b *BaseApi) ListNetwork(c *gin.Context) {
list, err := containerService.ListNetwork()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags Container Network
// @Summary Delete network
// @Accept json
// @Param request body dto.BatchDelete true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/network/del [post]
// @x-panel-log {"bodyKeys":["names"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"删除容器网络 [names]","formatEN":"delete container network [names]"}
func (b *BaseApi) DeleteNetwork(c *gin.Context) {
var req dto.BatchDelete
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.DeleteNetwork(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container Network
// @Summary Create network
// @Accept json
// @Param request body dto.NetworkCreate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/network [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"创建容器网络 name","formatEN":"create container network [name]"}
func (b *BaseApi) CreateNetwork(c *gin.Context) {
var req dto.NetworkCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.CreateNetwork(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container Volume
// @Summary Page volumes
// @Accept json
// @Param request body dto.SearchWithPage true "request"
// @Produce json
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/volume/search [post]
func (b *BaseApi) SearchVolume(c *gin.Context) {
var req dto.SearchWithPage
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := containerService.PageVolume(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Container Volume
// @Summary List volumes
// @Accept json
// @Produce json
// @Success 200 {array} dto.Options
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/volume [get]
func (b *BaseApi) ListVolume(c *gin.Context) {
list, err := containerService.ListVolume()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags Container Volume
// @Summary Delete volume
// @Accept json
// @Param request body dto.BatchDelete true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/volume/del [post]
// @x-panel-log {"bodyKeys":["names"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"删除容器存储卷 [names]","formatEN":"delete container volume [names]"}
func (b *BaseApi) DeleteVolume(c *gin.Context) {
var req dto.BatchDelete
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.DeleteVolume(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container Volume
// @Summary Create volume
// @Accept json
// @Param request body dto.VolumeCreate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/volume [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"创建容器存储卷 [name]","formatEN":"create container volume [name]"}
func (b *BaseApi) CreateVolume(c *gin.Context) {
var req dto.VolumeCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.CreateVolume(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container Compose
// @Summary Update compose
// @Accept json
// @Param request body dto.ComposeUpdate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/compose/update [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"更新 compose [name]","formatEN":"update compose information [name]"}
func (b *BaseApi) ComposeUpdate(c *gin.Context) {
var req dto.ComposeUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := containerService.ComposeUpdate(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container Compose
// @Summary Load compose environment variables
// @Accept json
// @Param request body dto.FilePath true "request"
// @Success 200 {array} string
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/compose/env [post]
func (b *BaseApi) LoadComposeEnv(c *gin.Context) {
var req dto.FilePath
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := containerService.LoadComposeEnv(req.Path)
if err != nil {
helper.InternalServer(c, err)
}
helper.SuccessWithData(c, data)
}
// @Tags Container
// @Summary Container logs
// @Param container query string false "容器名称"
// @Param since query string false "时间筛选"
// @Param follow query string false "是否追踪"
// @Param tail query string false "显示行号"
// @Param timestamp query string false "是否显示时间"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/search/log [get]
func (b *BaseApi) ContainerStreamLogs(c *gin.Context) {
c.Header("Content-Type", "text/event-stream")
c.Header("Cache-Control", "no-cache")
c.Header("Connection", "keep-alive")
c.Header("Transfer-Encoding", "chunked")
since := c.Query("since")
follow := c.Query("follow") == "true"
tail := c.Query("tail")
timestamp := c.Query("timestamp") == "true"
container := c.Query("container")
compose := c.Query("compose")
streamLog := dto.StreamLog{
Compose: compose,
Container: container,
Since: since,
Follow: follow,
Tail: tail,
Timestamp: timestamp,
Type: "container",
}
if compose != "" {
streamLog.Type = "compose"
}
containerService.StreamLogs(c, streamLog)
}
================================================
FILE: agent/app/api/v2/cronjob.go
================================================
package v2
import (
"net/http"
"strings"
"time"
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/1Panel-dev/1Panel/agent/utils/common"
"github.com/gin-gonic/gin"
)
// @Tags Cronjob
// @Summary Create cronjob
// @Accept json
// @Param request body dto.CronjobOperate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs [post]
// @x-panel-log {"bodyKeys":["type","name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"创建计划任务 [type][name]","formatEN":"create cronjob [type][name]"}
func (b *BaseApi) CreateCronjob(c *gin.Context) {
var req dto.CronjobOperate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := cronjobService.Create(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Cronjob
// @Summary Load cronjob info
// @Accept json
// @Param request body dto.OperateByID true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/load/info [post]
func (b *BaseApi) LoadCronjobInfo(c *gin.Context) {
var req dto.OperateByID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := cronjobService.LoadInfo(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags Cronjob
// @Summary Export cronjob list
// @Accept json
// @Param request body dto.OperateByIDs true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/export [post]
func (b *BaseApi) ExportCronjob(c *gin.Context) {
var req dto.OperateByIDs
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
content, err := cronjobService.Export(req)
if err != nil {
helper.InternalServer(c, err)
return
}
http.ServeContent(c.Writer, c.Request, "", time.Now(), strings.NewReader(content))
}
// @Tags Cronjob
// @Summary Import cronjob list
// @Accept json
// @Param request body dto.CronjobImport true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/import [post]
func (b *BaseApi) ImportCronjob(c *gin.Context) {
var req dto.CronjobImport
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := cronjobService.Import(req.Cronjobs); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Cronjob
// @Summary Load script options
// @Success 200 {array} dto.ScriptOptions
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/script/options [get]
func (b *BaseApi) LoadScriptOptions(c *gin.Context) {
helper.SuccessWithData(c, cronjobService.LoadScriptOptions())
}
// @Tags Cronjob
// @Summary Load cronjob spec time
// @Accept json
// @Param request body dto.CronjobSpec true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/next [post]
func (b *BaseApi) LoadNextHandle(c *gin.Context) {
var req dto.CronjobSpec
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
list, err := cronjobService.LoadNextHandle(req.Spec)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags Cronjob
// @Summary Page cronjobs
// @Accept json
// @Param request body dto.PageCronjob true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/search [post]
func (b *BaseApi) SearchCronjob(c *gin.Context) {
var req dto.PageCronjob
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := cronjobService.SearchWithPage(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Cronjob
// @Summary Page job records
// @Accept json
// @Param request body dto.SearchRecord true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/search/records [post]
func (b *BaseApi) SearchJobRecords(c *gin.Context) {
var req dto.SearchRecord
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
loc, _ := time.LoadLocation(common.LoadTimeZoneByCmd())
req.StartTime = req.StartTime.In(loc)
req.EndTime = req.EndTime.In(loc)
total, list, err := cronjobService.SearchRecords(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Cronjob
// @Summary Load Cronjob record log
// @Accept json
// @Param request body dto.OperateByID true "request"
// @Success 200 {string} content
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/records/log [post]
func (b *BaseApi) LoadRecordLog(c *gin.Context) {
var req dto.OperateByID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
content := cronjobService.LoadRecordLog(req)
helper.SuccessWithData(c, content)
}
// @Tags Cronjob
// @Summary Clean job records
// @Accept json
// @Param request body dto.CronjobClean true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/records/clean [post]
// @x-panel-log {"bodyKeys":["cronjobID"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"cronjobID","isList":false,"db":"cronjobs","output_column":"name","output_value":"name"}],"formatZH":"清空计划任务记录 [name]","formatEN":"clean cronjob [name] records"}
func (b *BaseApi) CleanRecord(c *gin.Context) {
var req dto.CronjobClean
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := cronjobService.CleanRecord(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Cronjob
// @Summary Handle stop job
// @Accept json
// @Param request body dto.OperateByID true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/stop [post]
func (b *BaseApi) StopCronJob(c *gin.Context) {
var req dto.OperateByID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := cronjobService.HandleStop(req.ID); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Cronjob
// @Summary Delete cronjob
// @Accept json
// @Param request body dto.CronjobBatchDelete true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/del [post]
// @x-panel-log {"bodyKeys":["ids"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"ids","isList":true,"db":"cronjobs","output_column":"name","output_value":"names"}],"formatZH":"删除计划任务 [names]","formatEN":"delete cronjob [names]"}
func (b *BaseApi) DeleteCronjob(c *gin.Context) {
var req dto.CronjobBatchDelete
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := cronjobService.Delete(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Cronjob
// @Summary Update cronjob
// @Accept json
// @Param request body dto.CronjobOperate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/update [post]
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":false,"db":"cronjobs","output_column":"name","output_value":"name"}],"formatZH":"更新计划任务 [name]","formatEN":"update cronjob [name]"}
func (b *BaseApi) UpdateCronjob(c *gin.Context) {
var req dto.CronjobOperate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := cronjobService.Update(req.ID, req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Cronjob
// @Summary Update cronjob group
// @Accept json
// @Param request body dto.ChangeGroup true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/group/update [post]
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":false,"db":"cronjobs","output_column":"name","output_value":"name"}],"formatZH":"更新计划任务分组 [name]","formatEN":"update cronjob group [name]"}
func (b *BaseApi) UpdateCronjobGroup(c *gin.Context) {
var req dto.ChangeGroup
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := cronjobService.UpdateGroup(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Cronjob
// @Summary Update cronjob status
// @Accept json
// @Param request body dto.CronjobUpdateStatus true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/status [post]
// @x-panel-log {"bodyKeys":["id","status"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":false,"db":"cronjobs","output_column":"name","output_value":"name"}],"formatZH":"修改计划任务 [name] 状态为 [status]","formatEN":"change the status of cronjob [name] to [status]."}
func (b *BaseApi) UpdateCronjobStatus(c *gin.Context) {
var req dto.CronjobUpdateStatus
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := cronjobService.UpdateStatus(req.ID, req.Status); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Cronjob
// @Summary Handle cronjob once
// @Accept json
// @Param request body dto.OperateByID true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /cronjobs/handle [post]
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":false,"db":"cronjobs","output_column":"name","output_value":"name"}],"formatZH":"手动执行计划任务 [name]","formatEN":"manually execute the cronjob [name]"}
func (b *BaseApi) HandleOnce(c *gin.Context) {
var req dto.OperateByID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := cronjobService.HandleOnce(req.ID); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/dashboard.go
================================================
package v2
import (
"errors"
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/gin-gonic/gin"
)
// @Tags Dashboard
// @Summary Load os info
// @Accept json
// @Success 200 {object} dto.OsInfo
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/base/os [get]
func (b *BaseApi) LoadDashboardOsInfo(c *gin.Context) {
data, err := dashboardService.LoadOsInfo()
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags Dashboard
// @Summary Load app launcher
// @Accept json
// @Success 200 {array} dto.AppLauncher
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/app/launcher [get]
func (b *BaseApi) LoadAppLauncher(c *gin.Context) {
data, err := dashboardService.LoadAppLauncher(c)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithDataGzipped(c, data)
}
// @Tags Dashboard
// @Summary Load app launcher options
// @Accept json
// @Param request body dto.SearchByFilter true "request"
// @Success 200 {array} dto.LauncherOption
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/app/launcher/option [post]
func (b *BaseApi) LoadAppLauncherOption(c *gin.Context) {
var req dto.SearchByFilter
if err := helper.CheckBind(&req, c); err != nil {
return
}
data, err := dashboardService.ListLauncherOption(req.Filter)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags Dashboard
// @Summary Update app Launcher
// @Accept json
// @Param request body dto.SettingUpdate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/app/launcher/show [post]
// @x-panel-log {"bodyKeys":["key", "value"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"首页应用 [key] => 显示:[value]","formatEN":"app launcher [key] => show: [value]"}
func (b *BaseApi) UpdateAppLauncher(c *gin.Context) {
var req dto.SettingUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := dashboardService.ChangeShow(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Dashboard
// @Summary Load quick jump options
// @Success 200 {array} dto.QuickJump
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/quick/option [get]
func (b *BaseApi) LoadQuickOption(c *gin.Context) {
helper.SuccessWithData(c, dashboardService.LoadQuickOptions())
}
// @Tags Dashboard
// @Summary Update quick jump
// @Accept json
// @Param request body dto.ChangeQuicks true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/quick/change [post]
// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"切换快速跳转","formatEN":"change quick jump"}
func (b *BaseApi) UpdateQuickJump(c *gin.Context) {
var req dto.ChangeQuicks
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := dashboardService.ChangeQuick(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Dashboard
// @Summary Load dashboard base info
// @Accept json
// @Param ioOption path string true "request"
// @Param netOption path string true "request"
// @Success 200 {object} dto.DashboardBase
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/base/:ioOption/:netOption [get]
func (b *BaseApi) LoadDashboardBaseInfo(c *gin.Context) {
ioOption, ok := c.Params.Get("ioOption")
if !ok {
helper.BadRequest(c, errors.New("error ioOption in path"))
return
}
netOption, ok := c.Params.Get("netOption")
if !ok {
helper.BadRequest(c, errors.New("error ioOption in path"))
return
}
data, err := dashboardService.LoadBaseInfo(ioOption, netOption)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags Dashboard
// @Summary Load dashboard current info for node
// @Success 200 {object} dto.NodeCurrent
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/current/node [get]
func (b *BaseApi) LoadCurrentInfoForNode(c *gin.Context) {
data := dashboardService.LoadCurrentInfoForNode()
helper.SuccessWithData(c, data)
}
// @Tags Dashboard
// @Summary Load dashboard current info
// @Accept json
// @Param ioOption path string true "request"
// @Param netOption path string true "request"
// @Success 200 {object} dto.DashboardCurrent
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/current/:ioOption/:netOption [get]
func (b *BaseApi) LoadDashboardCurrentInfo(c *gin.Context) {
ioOption, ok := c.Params.Get("ioOption")
if !ok {
helper.BadRequest(c, errors.New("error ioOption in path"))
return
}
netOption, ok := c.Params.Get("netOption")
if !ok {
helper.BadRequest(c, errors.New("error netOption in path"))
return
}
data := dashboardService.LoadCurrentInfo(ioOption, netOption)
helper.SuccessWithData(c, data)
}
// @Tags Dashboard
// @Summary Load top cpu processes
// @Success 200 {array} dto.Process
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/current/top/cpu [get]
func (b *BaseApi) LoadDashboardTopCPU(c *gin.Context) {
data := dashboardService.LoadTopCPU()
helper.SuccessWithData(c, data)
}
// @Tags Dashboard
// @Summary Load top memory processes
// @Success 200 {array} dto.Process
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/current/top/mem [get]
func (b *BaseApi) LoadDashboardTopMem(c *gin.Context) {
data := dashboardService.LoadTopMem()
helper.SuccessWithData(c, data)
}
// @Tags Dashboard
// @Summary System restart
// @Accept json
// @Param operation path string true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /dashboard/system/restart/:operation [post]
func (b *BaseApi) SystemRestart(c *gin.Context) {
operation, ok := c.Params.Get("operation")
if !ok {
helper.BadRequest(c, errors.New("error operation in path"))
return
}
if err := dashboardService.Restart(operation); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/database.go
================================================
package v2
import (
"encoding/base64"
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/gin-gonic/gin"
)
// @Tags Database
// @Summary Create database
// @Accept json
// @Param request body dto.DatabaseCreate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/db [post]
// @x-panel-log {"bodyKeys":["name", "type"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"创建远程数据库 [name][type]","formatEN":"create database [name][type]"}
func (b *BaseApi) CreateDatabase(c *gin.Context) {
var req dto.DatabaseCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if req.SSL {
key, _ := base64.StdEncoding.DecodeString(req.ClientKey)
req.ClientKey = string(key)
cert, _ := base64.StdEncoding.DecodeString(req.ClientCert)
req.ClientCert = string(cert)
ca, _ := base64.StdEncoding.DecodeString(req.RootCert)
req.RootCert = string(ca)
}
if err := databaseService.Create(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Database
// @Summary Check database
// @Accept json
// @Param request body dto.DatabaseCreate true "request"
// @Success 200 {boolean} isOk
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/db/check [post]
// @x-panel-log {"bodyKeys":["name", "type"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"检测远程数据库 [name][type] 连接性","formatEN":"check if database [name][type] is connectable"}
func (b *BaseApi) CheckDatabase(c *gin.Context) {
var req dto.DatabaseCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if req.SSL {
clientKey, _ := base64.StdEncoding.DecodeString(req.ClientKey)
req.ClientKey = string(clientKey)
clientCert, _ := base64.StdEncoding.DecodeString(req.ClientCert)
req.ClientCert = string(clientCert)
rootCert, _ := base64.StdEncoding.DecodeString(req.RootCert)
req.RootCert = string(rootCert)
}
helper.SuccessWithData(c, databaseService.CheckDatabase(req))
}
// @Tags Database
// @Summary Page databases
// @Accept json
// @Param request body dto.DatabaseSearch true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/db/search [post]
func (b *BaseApi) SearchDatabase(c *gin.Context) {
var req dto.DatabaseSearch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := databaseService.SearchWithPage(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Database
// @Summary List databases
// @Success 200 {array} dto.DatabaseOption
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/db/list/:type [get]
func (b *BaseApi) ListDatabase(c *gin.Context) {
dbType, err := helper.GetStrParamByKey(c, "type")
if err != nil {
helper.BadRequest(c, err)
return
}
list, err := databaseService.List(dbType)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags Database
// @Summary List databases
// @Success 200 {array} dto.DatabaseItem
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/db/item/:type [get]
func (b *BaseApi) LoadDatabaseItems(c *gin.Context) {
dbType, err := helper.GetStrParamByKey(c, "type")
if err != nil {
helper.BadRequest(c, err)
return
}
list, err := databaseService.LoadItems(dbType)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, list)
}
// @Tags Database
// @Summary Get databases
// @Success 200 {object} dto.DatabaseInfo
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/db/:name [get]
func (b *BaseApi) GetDatabase(c *gin.Context) {
name, err := helper.GetStrParamByKey(c, "name")
if err != nil {
helper.BadRequest(c, err)
return
}
data, err := databaseService.Get(name)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags Database
// @Summary Check before delete remote database
// @Accept json
// @Param request body dto.OperateByID true "request"
// @Success 200 {array} string
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/db/del/check [post]
func (b *BaseApi) DeleteCheckDatabase(c *gin.Context) {
var req dto.OperateByID
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
apps, err := databaseService.DeleteCheck(req.ID)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, apps)
}
// @Tags Database
// @Summary Delete database
// @Accept json
// @Param request body dto.DatabaseDelete true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/db/del [post]
// @x-panel-log {"bodyKeys":["ids"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"ids","isList":true,"db":"databases","output_column":"name","output_value":"names"}],"formatZH":"删除远程数据库 [names]","formatEN":"delete database [names]"}
func (b *BaseApi) DeleteDatabase(c *gin.Context) {
var req dto.DatabaseDelete
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := databaseService.Delete(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Database
// @Summary Update database
// @Accept json
// @Param request body dto.DatabaseUpdate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/db/update [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"更新远程数据库 [name]","formatEN":"update database [name]"}
func (b *BaseApi) UpdateDatabase(c *gin.Context) {
var req dto.DatabaseUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if req.SSL {
cKey, _ := base64.StdEncoding.DecodeString(req.ClientKey)
req.ClientKey = string(cKey)
cCert, _ := base64.StdEncoding.DecodeString(req.ClientCert)
req.ClientCert = string(cCert)
ca, _ := base64.StdEncoding.DecodeString(req.RootCert)
req.RootCert = string(ca)
}
if err := databaseService.Update(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/database_common.go
================================================
package v2
import (
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/gin-gonic/gin"
)
// @Tags Database Common
// @Summary Load base info
// @Accept json
// @Param request body dto.OperationWithNameAndType true "request"
// @Success 200 {object} dto.DBBaseInfo
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/common/info [post]
func (b *BaseApi) LoadDBBaseInfo(c *gin.Context) {
var req dto.OperationWithNameAndType
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := dbCommonService.LoadBaseInfo(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags Database Common
// @Summary Load Database conf
// @Accept json
// @Param request body dto.OperationWithNameAndType true "request"
// @Success 200 {string} content
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/common/load/file [post]
func (b *BaseApi) LoadDBFile(c *gin.Context) {
var req dto.OperationWithNameAndType
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
content, err := dbCommonService.LoadDatabaseFile(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, content)
}
// @Tags Database Common
// @Summary Update conf by upload file
// @Accept json
// @Param request body dto.DBConfUpdateByFile true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/common/update/conf [post]
// @x-panel-log {"bodyKeys":["type","database"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"更新 [type] 数据库 [database] 配置信息","formatEN":"update the [type] [database] database configuration information"}
func (b *BaseApi) UpdateDBConfByFile(c *gin.Context) {
var req dto.DBConfUpdateByFile
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := dbCommonService.UpdateConfByFile(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
================================================
FILE: agent/app/api/v2/database_mysql.go
================================================
package v2
import (
"context"
"encoding/base64"
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/agent/app/dto"
"github.com/gin-gonic/gin"
)
// @Tags Database Mysql
// @Summary Create mysql database
// @Accept json
// @Param request body dto.MysqlDBCreate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases [post]
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"创建 mysql 数据库 [name]","formatEN":"create mysql database [name]"}
func (b *BaseApi) CreateMysql(c *gin.Context) {
var req dto.MysqlDBCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if len(req.Password) != 0 {
password, err := base64.StdEncoding.DecodeString(req.Password)
if err != nil {
helper.BadRequest(c, err)
return
}
req.Password = string(password)
}
if _, err := mysqlService.Create(context.Background(), req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Database Mysql
// @Summary Bind user of mysql database
// @Accept json
// @Param request body dto.BindUser true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/bind [post]
// @x-panel-log {"bodyKeys":["database", "username"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"绑定 mysql 数据库名 [database] [username]","formatEN":"bind mysql database [database] [username]"}
func (b *BaseApi) BindUser(c *gin.Context) {
var req dto.BindUser
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if len(req.Password) != 0 {
password, err := base64.StdEncoding.DecodeString(req.Password)
if err != nil {
helper.BadRequest(c, err)
return
}
req.Password = string(password)
}
if err := mysqlService.BindUser(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Database Mysql
// @Summary Update mysql database description
// @Accept json
// @Param request body dto.UpdateDescription true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/description/update [post]
// @x-panel-log {"bodyKeys":["id","description"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":false,"db":"database_mysqls","output_column":"name","output_value":"name"}],"formatZH":"mysql 数据库 [name] 描述信息修改 [description]","formatEN":"The description of the mysql database [name] is modified => [description]"}
func (b *BaseApi) UpdateMysqlDescription(c *gin.Context) {
var req dto.UpdateDescription
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := mysqlService.UpdateDescription(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Database Mysql
// @Summary Change mysql password
// @Accept json
// @Param request body dto.ChangeDBInfo true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/change/password [post]
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":false,"db":"database_mysqls","output_column":"name","output_value":"name"}],"formatZH":"更新数据库 [name] 密码","formatEN":"Update database [name] password"}
func (b *BaseApi) ChangeMysqlPassword(c *gin.Context) {
var req dto.ChangeDBInfo
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if len(req.Value) != 0 {
value, err := base64.StdEncoding.DecodeString(req.Value)
if err != nil {
helper.BadRequest(c, err)
return
}
req.Value = string(value)
}
if err := mysqlService.ChangePassword(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Database Mysql
// @Summary Change mysql access
// @Accept json
// @Param request body dto.ChangeDBInfo true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/change/access [post]
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFunctions":[{"input_column":"id","input_value":"id","isList":false,"db":"database_mysqls","output_column":"name","output_value":"name"}],"formatZH":"更新数据库 [name] 访问权限","formatEN":"Update database [name] access"}
func (b *BaseApi) ChangeMysqlAccess(c *gin.Context) {
var req dto.ChangeDBInfo
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := mysqlService.ChangeAccess(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Database Mysql
// @Summary Update mysql variables
// @Accept json
// @Param request body dto.MysqlVariablesUpdate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/variables/update [post]
// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"调整 mysql 数据库性能参数","formatEN":"adjust mysql database performance parameters"}
func (b *BaseApi) UpdateMysqlVariables(c *gin.Context) {
var req dto.MysqlVariablesUpdate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := mysqlService.UpdateVariables(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Database Mysql
// @Summary Page mysql databases
// @Accept json
// @Param request body dto.MysqlDBSearch true "request"
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/search [post]
func (b *BaseApi) SearchMysql(c *gin.Context) {
var req dto.MysqlDBSearch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := mysqlService.SearchWithPage(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Database Mysql
// @Summary List mysql database format collation options
// @Accept json
// @Param request body dto.OperationWithName true "request"
// @Success 200 {array} dto.MysqlFormatCollationOption
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/format/options [post]
func (b *BaseApi) ListDBFormatCollationOptions(c *gin.Context) {
var req dto.OperationWithName
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
helper.SuccessWithData(c, mysqlService.LoadFormatOption(req))
}
// @Tags Database Mysql
// @Summary Load mysql database from remote
// @Accept json
// @Param request body dto.MysqlLoadDB true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/load [post]
func (b *BaseApi) LoadDBFromRemote(c *gin.Context) {
var req dto.My
gitextract_ro__1khy/ ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── 1_bug_report.yml │ │ ├── 2_feature_request.yml │ │ └── config.yml │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── add-labels-for-pr.yml │ ├── build-and-publish.yml │ ├── issue-translator.yml │ ├── llm-code-review.yml │ ├── sonarcloud-scan.yml │ ├── sync2gitee.yml │ └── tyops-check.yml ├── .gitignore ├── .goreleaser.yaml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── OWNERS ├── README.md ├── SECURITY.md ├── agent/ │ ├── app/ │ │ ├── api/ │ │ │ └── v2/ │ │ │ ├── agents.go │ │ │ ├── ai.go │ │ │ ├── alert.go │ │ │ ├── app.go │ │ │ ├── app_ignore_upgrade.go │ │ │ ├── app_install.go │ │ │ ├── backup.go │ │ │ ├── clam.go │ │ │ ├── compose_template.go │ │ │ ├── container.go │ │ │ ├── cronjob.go │ │ │ ├── dashboard.go │ │ │ ├── database.go │ │ │ ├── database_common.go │ │ │ ├── database_mysql.go │ │ │ ├── database_postgresql.go │ │ │ ├── database_redis.go │ │ │ ├── device.go │ │ │ ├── disk.go │ │ │ ├── docker.go │ │ │ ├── entry.go │ │ │ ├── fail2ban.go │ │ │ ├── favorite.go │ │ │ ├── file.go │ │ │ ├── firewall.go │ │ │ ├── ftp.go │ │ │ ├── group.go │ │ │ ├── health.go │ │ │ ├── helper/ │ │ │ │ └── helper.go │ │ │ ├── host.go │ │ │ ├── host_tool.go │ │ │ ├── image.go │ │ │ ├── image_repo.go │ │ │ ├── logs.go │ │ │ ├── mcp_server.go │ │ │ ├── monitor.go │ │ │ ├── nginx.go │ │ │ ├── php_extensions.go │ │ │ ├── process.go │ │ │ ├── recycle_bin.go │ │ │ ├── runtime.go │ │ │ ├── setting.go │ │ │ ├── snapshot.go │ │ │ ├── ssh.go │ │ │ ├── system.go │ │ │ ├── task.go │ │ │ ├── tensorrt_llm.go │ │ │ ├── terminal.go │ │ │ ├── website.go │ │ │ ├── website_acme_account.go │ │ │ ├── website_ca.go │ │ │ ├── website_dns_account.go │ │ │ ├── website_domain.go │ │ │ └── website_ssl.go │ │ ├── dto/ │ │ │ ├── agents.go │ │ │ ├── ai.go │ │ │ ├── alert.go │ │ │ ├── app.go │ │ │ ├── backup.go │ │ │ ├── clam.go │ │ │ ├── command.go │ │ │ ├── common_req.go │ │ │ ├── common_res.go │ │ │ ├── compose_template.go │ │ │ ├── container.go │ │ │ ├── cronjob.go │ │ │ ├── dashboard.go │ │ │ ├── database.go │ │ │ ├── database_postgresql.go │ │ │ ├── device.go │ │ │ ├── disk.go │ │ │ ├── docker.go │ │ │ ├── fail2ban.go │ │ │ ├── file.go │ │ │ ├── firewall.go │ │ │ ├── ftp.go │ │ │ ├── group.go │ │ │ ├── host.go │ │ │ ├── image.go │ │ │ ├── image_repo.go │ │ │ ├── logs.go │ │ │ ├── monitor.go │ │ │ ├── nginx.go │ │ │ ├── request/ │ │ │ │ ├── app.go │ │ │ │ ├── app_ignore_upgrade.go │ │ │ │ ├── common.go │ │ │ │ ├── disk.go │ │ │ │ ├── favorite.go │ │ │ │ ├── file.go │ │ │ │ ├── host_tool.go │ │ │ │ ├── mcp_server.go │ │ │ │ ├── nginx.go │ │ │ │ ├── php_extensions.go │ │ │ │ ├── process.go │ │ │ │ ├── recycle_bin.go │ │ │ │ ├── runtime.go │ │ │ │ ├── task.go │ │ │ │ ├── tensorrt_llm.go │ │ │ │ ├── website.go │ │ │ │ └── website_ssl.go │ │ │ ├── response/ │ │ │ │ ├── app.go │ │ │ │ ├── app_ignore_upgrade.go │ │ │ │ ├── disk.go │ │ │ │ ├── favorite.go │ │ │ │ ├── file.go │ │ │ │ ├── host_tool.go │ │ │ │ ├── mcp_server.go │ │ │ │ ├── nginx.go │ │ │ │ ├── php_extensions.go │ │ │ │ ├── recycle_bin.go │ │ │ │ ├── runtime.go │ │ │ │ ├── system.go │ │ │ │ ├── task.go │ │ │ │ ├── tensorrt_llm.go │ │ │ │ ├── website.go │ │ │ │ └── website_ssl.go │ │ │ ├── setting.go │ │ │ ├── snapshot.go │ │ │ └── ssh.go │ │ ├── model/ │ │ │ ├── agent.go │ │ │ ├── agent_account.go │ │ │ ├── agent_account_model.go │ │ │ ├── ai.go │ │ │ ├── alert.go │ │ │ ├── app.go │ │ │ ├── app_detail.go │ │ │ ├── app_ignore_upgrade.go │ │ │ ├── app_install.go │ │ │ ├── app_install_resource.go │ │ │ ├── app_launcher.go │ │ │ ├── app_tag.go │ │ │ ├── backup.go │ │ │ ├── base.go │ │ │ ├── clam.go │ │ │ ├── compose_template.go │ │ │ ├── cronjob.go │ │ │ ├── database.go │ │ │ ├── database_mysql.go │ │ │ ├── database_postgresql.go │ │ │ ├── favorite.go │ │ │ ├── firewall.go │ │ │ ├── ftp.go │ │ │ ├── group.go │ │ │ ├── host.go │ │ │ ├── image_repo.go │ │ │ ├── mcp_server.go │ │ │ ├── monitor.go │ │ │ ├── php_extensions.go │ │ │ ├── runtime.go │ │ │ ├── setting.go │ │ │ ├── snapshot.go │ │ │ ├── ssh.go │ │ │ ├── tag.go │ │ │ ├── task.go │ │ │ ├── tensorrt_llm.go │ │ │ ├── website.go │ │ │ ├── website_acme_account.go │ │ │ ├── website_ca.go │ │ │ ├── website_dns_account.go │ │ │ ├── website_domain.go │ │ │ └── website_ssl.go │ │ ├── provider/ │ │ │ ├── catalog.go │ │ │ ├── openclaw.go │ │ │ └── verify.go │ │ ├── repo/ │ │ │ ├── agent.go │ │ │ ├── agent_account.go │ │ │ ├── agent_account_model.go │ │ │ ├── ai.go │ │ │ ├── alert.go │ │ │ ├── app.go │ │ │ ├── app_detail.go │ │ │ ├── app_ignore_upgrade.go │ │ │ ├── app_install.go │ │ │ ├── app_install_resource.go │ │ │ ├── app_launcher.go │ │ │ ├── app_tag.go │ │ │ ├── backup.go │ │ │ ├── clam.go │ │ │ ├── common.go │ │ │ ├── compose_template.go │ │ │ ├── cronjob.go │ │ │ ├── database.go │ │ │ ├── database_mysql.go │ │ │ ├── database_postgresql.go │ │ │ ├── favorite.go │ │ │ ├── ftp.go │ │ │ ├── group.go │ │ │ ├── host.go │ │ │ ├── image_repo.go │ │ │ ├── mcp_server.go │ │ │ ├── monitor.go │ │ │ ├── php_extensions.go │ │ │ ├── runtime.go │ │ │ ├── script.go │ │ │ ├── setting.go │ │ │ ├── snapshot.go │ │ │ ├── tag.go │ │ │ ├── task.go │ │ │ ├── tensorrt_llm.go │ │ │ ├── website.go │ │ │ ├── website_acme_account.go │ │ │ ├── website_ca.go │ │ │ ├── website_dns_account.go │ │ │ ├── website_domain.go │ │ │ └── website_ssl.go │ │ ├── service/ │ │ │ ├── agents.go │ │ │ ├── agents_utils.go │ │ │ ├── ai.go │ │ │ ├── alert.go │ │ │ ├── alert_helper.go │ │ │ ├── alert_sender.go │ │ │ ├── app.go │ │ │ ├── app_ingore_upgrade.go │ │ │ ├── app_install.go │ │ │ ├── app_sync_task.go │ │ │ ├── app_utils.go │ │ │ ├── backup.go │ │ │ ├── backup_app.go │ │ │ ├── backup_compose.go │ │ │ ├── backup_container.go │ │ │ ├── backup_mysql.go │ │ │ ├── backup_postgresql.go │ │ │ ├── backup_record.go │ │ │ ├── backup_redis.go │ │ │ ├── backup_runtime.go │ │ │ ├── backup_website.go │ │ │ ├── clam.go │ │ │ ├── compose_template.go │ │ │ ├── container.go │ │ │ ├── container_compose.go │ │ │ ├── container_network.go │ │ │ ├── container_volume.go │ │ │ ├── cronjob.go │ │ │ ├── cronjob_backup.go │ │ │ ├── cronjob_helper.go │ │ │ ├── dashboard.go │ │ │ ├── database.go │ │ │ ├── database_common.go │ │ │ ├── database_mysql.go │ │ │ ├── database_postgresql.go │ │ │ ├── database_redis.go │ │ │ ├── device.go │ │ │ ├── device_clean.go │ │ │ ├── disk.go │ │ │ ├── disk_utils.go │ │ │ ├── docker.go │ │ │ ├── entry.go │ │ │ ├── fail2ban.go │ │ │ ├── favorite.go │ │ │ ├── file.go │ │ │ ├── firewall.go │ │ │ ├── ftp.go │ │ │ ├── group.go │ │ │ ├── helper.go │ │ │ ├── host.go │ │ │ ├── host_tool.go │ │ │ ├── image.go │ │ │ ├── image_repo.go │ │ │ ├── iptables.go │ │ │ ├── logs.go │ │ │ ├── mcp_server.go │ │ │ ├── monitor.go │ │ │ ├── nginx.go │ │ │ ├── nginx_utils.go │ │ │ ├── php_extensions.go │ │ │ ├── process.go │ │ │ ├── recycle_bin.go │ │ │ ├── runtime.go │ │ │ ├── runtime_utils.go │ │ │ ├── setting.go │ │ │ ├── snapshot.go │ │ │ ├── snapshot_create.go │ │ │ ├── snapshot_recover.go │ │ │ ├── snapshot_rollback.go │ │ │ ├── ssh.go │ │ │ ├── system.go │ │ │ ├── task.go │ │ │ ├── tensorrt_llm.go │ │ │ ├── website.go │ │ │ ├── website_acme_account.go │ │ │ ├── website_auth_basic.go │ │ │ ├── website_ca.go │ │ │ ├── website_dns_account.go │ │ │ ├── website_domain.go │ │ │ ├── website_lb.go │ │ │ ├── website_op.go │ │ │ ├── website_proxy.go │ │ │ ├── website_rewrite.go │ │ │ ├── website_ssl.go │ │ │ └── website_utils.go │ │ └── task/ │ │ └── task.go │ ├── buserr/ │ │ ├── errors.go │ │ └── multi_err.go │ ├── cmd/ │ │ └── server/ │ │ ├── ai/ │ │ │ ├── ai.go │ │ │ ├── compose.yml │ │ │ └── llm-compose.yml │ │ ├── cmd/ │ │ │ └── root.go │ │ ├── conf/ │ │ │ ├── app.yaml │ │ │ └── conf.go │ │ ├── docs/ │ │ │ ├── swagger.go │ │ │ └── x-log.json │ │ ├── main.go │ │ └── nginx_conf/ │ │ ├── 404.html │ │ ├── cache.conf │ │ ├── domain404.html │ │ ├── gzip.conf │ │ ├── index.html │ │ ├── index.php │ │ ├── nginx_conf.go │ │ ├── path_auth.conf │ │ ├── php-fpm.conf │ │ ├── php_extensions.json │ │ ├── proxy.conf │ │ ├── proxy_cache.conf │ │ ├── proxy_no_cache.conf │ │ ├── rewrite/ │ │ │ ├── crmeb.conf │ │ │ ├── dabr.conf │ │ │ ├── dbshop.conf │ │ │ ├── dedecms.conf │ │ │ ├── default.conf │ │ │ ├── discuz.conf │ │ │ ├── discuzx.conf │ │ │ ├── discuzx2.conf │ │ │ ├── discuzx3.conf │ │ │ ├── drupal.conf │ │ │ ├── ecshop.conf │ │ │ ├── edusoho.conf │ │ │ ├── emlog.conf │ │ │ ├── empirecms.conf │ │ │ ├── laravel5.conf │ │ │ ├── maccms.conf │ │ │ ├── mvc.conf │ │ │ ├── niushop.conf │ │ │ ├── phpcms.conf │ │ │ ├── phpwind.conf │ │ │ ├── sablog.conf │ │ │ ├── seacms.conf │ │ │ ├── shopex.conf │ │ │ ├── shopwind.conf │ │ │ ├── thinkphp.conf │ │ │ ├── typecho.conf │ │ │ ├── typecho2.conf │ │ │ ├── wordpress.conf │ │ │ ├── wp2.conf │ │ │ ├── yii2.conf │ │ │ └── zblog.conf │ │ ├── root_ssl.conf │ │ ├── sse.conf │ │ ├── ssl.conf │ │ ├── stop.html │ │ ├── stream_default.conf │ │ ├── upstream.conf │ │ └── website_default.conf │ ├── constant/ │ │ ├── alert.go │ │ ├── app.go │ │ ├── backup.go │ │ ├── common.go │ │ ├── container.go │ │ ├── host_tool.go │ │ ├── nginx.go │ │ ├── runtime.go │ │ ├── status.go │ │ ├── task.go │ │ └── website.go │ ├── cron/ │ │ ├── cron.go │ │ └── job/ │ │ ├── app.go │ │ ├── backup.go │ │ ├── ssl.go │ │ └── website.go │ ├── global/ │ │ ├── config.go │ │ └── global.go │ ├── go.mod │ ├── go.sum │ ├── i18n/ │ │ ├── i18n.go │ │ └── lang/ │ │ ├── en.yaml │ │ ├── es-ES.yaml │ │ ├── ja.yaml │ │ ├── ko.yaml │ │ ├── ms.yaml │ │ ├── pt-BR.yaml │ │ ├── ru.yaml │ │ ├── tr.yaml │ │ ├── zh-Hant.yaml │ │ └── zh.yaml │ ├── init/ │ │ ├── app/ │ │ │ └── app.go │ │ ├── business/ │ │ │ └── business.go │ │ ├── cache/ │ │ │ ├── cache.go │ │ │ └── db/ │ │ │ └── db.go │ │ ├── db/ │ │ │ └── db.go │ │ ├── dir/ │ │ │ └── dir.go │ │ ├── firewall/ │ │ │ └── firewall.go │ │ ├── hook/ │ │ │ └── hook.go │ │ ├── lang/ │ │ │ └── lang.go │ │ ├── log/ │ │ │ └── log.go │ │ ├── migration/ │ │ │ ├── migrate.go │ │ │ └── migrations/ │ │ │ ├── init.go │ │ │ └── utils/ │ │ │ ├── agent_account_model_pool.go │ │ │ ├── openclaw_agent.go │ │ │ └── openclaw_caddyfile.go │ │ ├── router/ │ │ │ └── router.go │ │ ├── validator/ │ │ │ └── validator.go │ │ └── viper/ │ │ └── viper.go │ ├── log/ │ │ ├── config.go │ │ ├── dup_write_darwin.go │ │ ├── dup_write_linux.go │ │ ├── dup_write_windows.go │ │ ├── manager.go │ │ └── writer.go │ ├── middleware/ │ │ ├── certificate.go │ │ └── operation.go │ ├── router/ │ │ ├── backup.go │ │ ├── common.go │ │ ├── entry.go │ │ ├── ro_ai.go │ │ ├── ro_alert.go │ │ ├── ro_app.go │ │ ├── ro_container.go │ │ ├── ro_cronjob.go │ │ ├── ro_dashboard.go │ │ ├── ro_database.go │ │ ├── ro_file.go │ │ ├── ro_group.go │ │ ├── ro_host.go │ │ ├── ro_log.go │ │ ├── ro_nginx.go │ │ ├── ro_process.go │ │ ├── ro_router.go │ │ ├── ro_runtime.go │ │ ├── ro_setting.go │ │ ├── ro_toolbox.go │ │ ├── ro_website.go │ │ ├── ro_website_acme_account.go │ │ ├── ro_website_ca.go │ │ ├── ro_website_dns_account.go │ │ └── ro_website_ssl.go │ ├── server/ │ │ ├── init.go │ │ └── server.go │ └── utils/ │ ├── ai_tools/ │ │ ├── gpu/ │ │ │ ├── common/ │ │ │ │ └── gpu_info.go │ │ │ ├── gpu.go │ │ │ └── schema/ │ │ │ ├── parser.go │ │ │ └── types.go │ │ └── xpu/ │ │ ├── types.go │ │ ├── xpu.go │ │ └── xpu_info.go │ ├── alert/ │ │ └── alert.go │ ├── alert_push/ │ │ └── alert_push.go │ ├── appicon/ │ │ └── appicon.go │ ├── clam/ │ │ └── clam.go │ ├── cloud_storage/ │ │ ├── client/ │ │ │ ├── ali.go │ │ │ ├── cos.go │ │ │ ├── google_drive.go │ │ │ ├── helper/ │ │ │ │ └── webdav/ │ │ │ │ ├── auth.go │ │ │ │ ├── auth_basic.go │ │ │ │ ├── auth_digest.go │ │ │ │ ├── auth_passport.go │ │ │ │ ├── errors.go │ │ │ │ ├── file.go │ │ │ │ ├── reques.go │ │ │ │ ├── utils.go │ │ │ │ └── webdav.go │ │ │ ├── helper.go │ │ │ ├── kodo.go │ │ │ ├── local.go │ │ │ ├── minio.go │ │ │ ├── onedrive.go │ │ │ ├── oss.go │ │ │ ├── s3.go │ │ │ ├── sftp.go │ │ │ ├── up.go │ │ │ └── webdav.go │ │ └── cloud_storage_client.go │ ├── cmd/ │ │ ├── cmd.go │ │ └── cmdx.go │ ├── common/ │ │ ├── common.go │ │ └── sqlite.go │ ├── compose/ │ │ └── compose.go │ ├── controller/ │ │ ├── controller.go │ │ └── manager/ │ │ ├── common.go │ │ ├── openrc.go │ │ ├── snap.go │ │ ├── systemd.go │ │ └── sysvinit.go │ ├── convert/ │ │ └── convert.go │ ├── copier/ │ │ └── copier.go │ ├── csv_export/ │ │ └── ssh_log.go │ ├── docker/ │ │ ├── compose.go │ │ └── docker.go │ ├── email/ │ │ └── smtp_sender.go │ ├── encrypt/ │ │ └── encrypt.go │ ├── env/ │ │ └── env.go │ ├── files/ │ │ ├── archiver.go │ │ ├── file_op.go │ │ ├── fileinfo.go │ │ ├── rar.go │ │ ├── tar.go │ │ ├── tar_gz.go │ │ ├── utils.go │ │ ├── x7z.go │ │ └── zip.go │ ├── firewall/ │ │ ├── client/ │ │ │ ├── firewalld.go │ │ │ ├── info.go │ │ │ ├── iptables/ │ │ │ │ ├── common.go │ │ │ │ ├── filter.go │ │ │ │ ├── forward.go │ │ │ │ └── persistence.go │ │ │ ├── iptables.go │ │ │ └── ufw.go │ │ └── client.go │ ├── geo/ │ │ └── geo.go │ ├── ini_conf/ │ │ └── ini.go │ ├── mysql/ │ │ ├── client/ │ │ │ ├── info.go │ │ │ ├── local.go │ │ │ └── remote.go │ │ └── client.go │ ├── nginx/ │ │ ├── components/ │ │ │ ├── block.go │ │ │ ├── comment.go │ │ │ ├── config.go │ │ │ ├── directive.go │ │ │ ├── http.go │ │ │ ├── location.go │ │ │ ├── lua_block.go │ │ │ ├── server.go │ │ │ ├── server_listen.go │ │ │ ├── statement.go │ │ │ ├── upstream.go │ │ │ └── upstream_server.go │ │ ├── dumper.go │ │ └── parser/ │ │ ├── flag/ │ │ │ └── flag.go │ │ ├── lexer.go │ │ └── parser.go │ ├── ntp/ │ │ └── ntp.go │ ├── openclaw/ │ │ └── caddyfile.go │ ├── postgresql/ │ │ ├── client/ │ │ │ ├── info.go │ │ │ ├── local.go │ │ │ └── remote.go │ │ └── client.go │ ├── psutil/ │ │ ├── cpu.go │ │ ├── disk.go │ │ ├── global.go │ │ └── host.go │ ├── re/ │ │ └── re.go │ ├── redis/ │ │ └── redis.go │ ├── req_helper/ │ │ ├── core.go │ │ └── request.go │ ├── ssh/ │ │ └── ssh.go │ ├── ssl/ │ │ ├── acme.go │ │ ├── client.go │ │ ├── dns_provider.go │ │ └── manual_client.go │ ├── terminal/ │ │ ├── ai/ │ │ │ ├── client.go │ │ │ ├── command_generator.go │ │ │ ├── config_runtime.go │ │ │ └── validate.go │ │ ├── ai_interceptor.go │ │ ├── local_cmd.go │ │ ├── ws_local_session.go │ │ └── ws_session.go │ ├── toolbox/ │ │ ├── fail2ban.go │ │ ├── helper/ │ │ │ └── sha512_crypt.go │ │ └── pure-ftpd.go │ ├── version/ │ │ └── version.go │ ├── websocket/ │ │ ├── client.go │ │ └── process_data.go │ └── xpack/ │ └── community.go ├── ci/ │ └── script.sh ├── core/ │ ├── app/ │ │ ├── api/ │ │ │ └── v2/ │ │ │ ├── auth.go │ │ │ ├── backup.go │ │ │ ├── command.go │ │ │ ├── entry.go │ │ │ ├── group.go │ │ │ ├── helper/ │ │ │ │ └── helper.go │ │ │ ├── logs.go │ │ │ ├── script_library.go │ │ │ ├── setting.go │ │ │ └── upgrade.go │ │ ├── dto/ │ │ │ ├── auth.go │ │ │ ├── backup.go │ │ │ ├── command.go │ │ │ ├── common.go │ │ │ ├── group.go │ │ │ ├── logs.go │ │ │ ├── script_library.go │ │ │ └── setting.go │ │ ├── model/ │ │ │ ├── agent.go │ │ │ ├── alert.go │ │ │ ├── backup.go │ │ │ ├── base.go │ │ │ ├── command.go │ │ │ ├── group.go │ │ │ ├── logs.go │ │ │ ├── script_library.go │ │ │ ├── setting.go │ │ │ ├── task.go │ │ │ └── upgrade_log.go │ │ ├── repo/ │ │ │ ├── agent.go │ │ │ ├── backup.go │ │ │ ├── command.go │ │ │ ├── common.go │ │ │ ├── group.go │ │ │ ├── logs.go │ │ │ ├── script_library.go │ │ │ ├── setting.go │ │ │ ├── task.go │ │ │ └── upgrade_log.go │ │ ├── service/ │ │ │ ├── auth.go │ │ │ ├── backup.go │ │ │ ├── command.go │ │ │ ├── entry.go │ │ │ ├── group.go │ │ │ ├── logs.go │ │ │ ├── script_library.go │ │ │ ├── setting.go │ │ │ └── upgrade.go │ │ └── task/ │ │ └── task.go │ ├── buserr/ │ │ ├── errors.go │ │ └── multi_err.go │ ├── cmd/ │ │ └── server/ │ │ ├── app/ │ │ │ ├── app_config.go │ │ │ ├── app_config.yml │ │ │ └── app_param.yml │ │ ├── cmd/ │ │ │ ├── app.go │ │ │ ├── listen-ip.go │ │ │ ├── reset.go │ │ │ ├── restore.go │ │ │ ├── root.go │ │ │ ├── update.go │ │ │ ├── user-info.go │ │ │ └── version.go │ │ ├── conf/ │ │ │ ├── app.yaml │ │ │ └── conf.go │ │ ├── docs/ │ │ │ ├── docs.go │ │ │ ├── swagger.go │ │ │ ├── swagger.json │ │ │ ├── swagger_test.go │ │ │ └── x-log.json │ │ ├── main.go │ │ ├── res/ │ │ │ ├── error_msg.go │ │ │ └── html/ │ │ │ ├── 200.html │ │ │ ├── 200_err_domain.html │ │ │ ├── 200_err_ip_limit.html │ │ │ ├── 400.html │ │ │ ├── 401.html │ │ │ ├── 403.html │ │ │ ├── 404.html │ │ │ ├── 408.html │ │ │ ├── 416.html │ │ │ └── 500.html │ │ └── web/ │ │ ├── static/ │ │ │ ├── china.json │ │ │ └── world.json │ │ └── web.go │ ├── constant/ │ │ ├── alert.go │ │ ├── common.go │ │ ├── session.go │ │ └── status.go │ ├── deps/ │ │ └── keepdeps.go │ ├── global/ │ │ ├── config.go │ │ └── global.go │ ├── go.mod │ ├── go.sum │ ├── i18n/ │ │ ├── i18n.go │ │ └── lang/ │ │ ├── en.yaml │ │ ├── es-ES.yaml │ │ ├── ja.yaml │ │ ├── ko.yaml │ │ ├── ms.yaml │ │ ├── pt-BR.yaml │ │ ├── ru.yaml │ │ ├── tr.yaml │ │ ├── zh-Hant.yaml │ │ └── zh.yaml │ ├── init/ │ │ ├── auth/ │ │ │ └── ip_tracker.go │ │ ├── cron/ │ │ │ ├── cron.go │ │ │ └── job/ │ │ │ └── backup.go │ │ ├── db/ │ │ │ └── db.go │ │ ├── geo/ │ │ │ └── lang.go │ │ ├── hook/ │ │ │ └── hook.go │ │ ├── log/ │ │ │ └── log.go │ │ ├── migration/ │ │ │ ├── helper/ │ │ │ │ └── menu.go │ │ │ ├── migrate.go │ │ │ └── migrations/ │ │ │ └── init.go │ │ ├── proxy/ │ │ │ └── proxy.go │ │ ├── router/ │ │ │ ├── proxy.go │ │ │ └── router.go │ │ ├── run/ │ │ │ └── run.go │ │ ├── session/ │ │ │ ├── psession/ │ │ │ │ └── psession.go │ │ │ └── session.go │ │ ├── swagger/ │ │ │ └── swag.go │ │ ├── validator/ │ │ │ └── validator.go │ │ └── viper/ │ │ └── viper.go │ ├── log/ │ │ ├── config.go │ │ ├── dup_write_darwin.go │ │ ├── dup_write_linux.go │ │ ├── dup_write_windows.go │ │ ├── manager.go │ │ └── writer.go │ ├── middleware/ │ │ ├── api_auth.go │ │ ├── bind_domain.go │ │ ├── demo_handle.go │ │ ├── helper.go │ │ ├── ip_limit.go │ │ ├── loading.go │ │ ├── operation.go │ │ ├── password_expired.go │ │ ├── password_rsa.go │ │ └── session.go │ ├── router/ │ │ ├── command.go │ │ ├── common.go │ │ ├── entry.go │ │ ├── ro_backup.go │ │ ├── ro_base.go │ │ ├── ro_group.go │ │ ├── ro_log.go │ │ ├── ro_router.go │ │ ├── ro_script_library.go │ │ └── ro_setting.go │ ├── server/ │ │ ├── init.go │ │ └── server.go │ └── utils/ │ ├── captcha/ │ │ └── captcha.go │ ├── cloud_storage/ │ │ └── refresh_token.go │ ├── cmd/ │ │ ├── cmd.go │ │ └── cmdx.go │ ├── common/ │ │ ├── common.go │ │ └── sqlite.go │ ├── controller/ │ │ ├── controller.go │ │ └── manager/ │ │ ├── common.go │ │ ├── openrc.go │ │ ├── snap.go │ │ ├── systemd.go │ │ └── sysvinit.go │ ├── copier/ │ │ └── copier.go │ ├── csv/ │ │ └── command.go │ ├── encrypt/ │ │ └── encrypt.go │ ├── files/ │ │ └── files.go │ ├── firewall/ │ │ └── firewall.go │ ├── geo/ │ │ └── geo.go │ ├── mfa/ │ │ └── mfa.go │ ├── passkey/ │ │ ├── passkey_record.go │ │ ├── passkey_store.go │ │ └── passkey_user.go │ ├── re/ │ │ └── re.go │ ├── req_helper/ │ │ ├── proxy_local/ │ │ │ └── req_to_local.go │ │ └── requset.go │ ├── security/ │ │ └── security.go │ ├── ssh/ │ │ ├── http.go │ │ └── ssh.go │ ├── terminal/ │ │ ├── local_cmd.go │ │ ├── ws_local_session.go │ │ └── ws_session.go │ └── xpack/ │ └── community.go ├── docs/ │ ├── README.ar.md │ ├── README.de.md │ ├── README.es-es.md │ ├── README.fr.md │ ├── README.id.md │ ├── README.ja.md │ ├── README.ko.md │ ├── README.ms.md │ ├── README.pt-br.md │ ├── README.ru.md │ ├── README.tr.md │ ├── README.zh-Hans.md │ └── README.zh-Hant.md ├── frontend/ │ ├── .editorconfig │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc.js │ ├── index.html │ ├── lint-staged.config.js │ ├── package.json │ ├── postcss.config.cjs │ ├── src/ │ │ ├── App.vue │ │ ├── api/ │ │ │ ├── config/ │ │ │ │ └── service-port.ts │ │ │ ├── helper/ │ │ │ │ ├── axios-cancel.ts │ │ │ │ └── check-status.ts │ │ │ ├── index.ts │ │ │ ├── interface/ │ │ │ │ ├── ai.ts │ │ │ │ ├── alert.ts │ │ │ │ ├── app.ts │ │ │ │ ├── auth.ts │ │ │ │ ├── backup.ts │ │ │ │ ├── command.ts │ │ │ │ ├── container.ts │ │ │ │ ├── cronjob.ts │ │ │ │ ├── dashboard.ts │ │ │ │ ├── database.ts │ │ │ │ ├── file.ts │ │ │ │ ├── group.ts │ │ │ │ ├── host-tool.ts │ │ │ │ ├── host.ts │ │ │ │ ├── index.ts │ │ │ │ ├── log.ts │ │ │ │ ├── nginx.ts │ │ │ │ ├── process.ts │ │ │ │ ├── runtime.ts │ │ │ │ ├── setting.ts │ │ │ │ ├── terminal.ts │ │ │ │ ├── toolbox.ts │ │ │ │ └── website.ts │ │ │ └── modules/ │ │ │ ├── ai.ts │ │ │ ├── alert.ts │ │ │ ├── app.ts │ │ │ ├── auth.ts │ │ │ ├── backup.ts │ │ │ ├── command.ts │ │ │ ├── container.ts │ │ │ ├── cronjob.ts │ │ │ ├── dashboard.ts │ │ │ ├── database.ts │ │ │ ├── files.ts │ │ │ ├── group.ts │ │ │ ├── host-tool.ts │ │ │ ├── host.ts │ │ │ ├── log.ts │ │ │ ├── nginx.ts │ │ │ ├── process.ts │ │ │ ├── runtime.ts │ │ │ ├── setting.ts │ │ │ ├── terminal.ts │ │ │ ├── toolbox.ts │ │ │ └── website.ts │ │ ├── assets/ │ │ │ ├── iconfont/ │ │ │ │ ├── iconfont.css │ │ │ │ ├── iconfont.js │ │ │ │ └── iconfont.json │ │ │ └── json/ │ │ │ └── iso.json │ │ ├── components/ │ │ │ ├── advanced-setting/ │ │ │ │ └── index.vue │ │ │ ├── agent-group/ │ │ │ │ ├── change.vue │ │ │ │ └── index.vue │ │ │ ├── app-status/ │ │ │ │ └── index.vue │ │ │ ├── back-button/ │ │ │ │ └── index.vue │ │ │ ├── backup/ │ │ │ │ └── index.vue │ │ │ ├── card-with-header/ │ │ │ │ └── index.vue │ │ │ ├── codemirror-pro/ │ │ │ │ ├── drawer.vue │ │ │ │ ├── index.vue │ │ │ │ └── nginx.ts │ │ │ ├── complex-table/ │ │ │ │ └── index.vue │ │ │ ├── config-card/ │ │ │ │ └── index.vue │ │ │ ├── confirm-dialog/ │ │ │ │ └── index.vue │ │ │ ├── copy-button/ │ │ │ │ └── index.vue │ │ │ ├── del-dialog/ │ │ │ │ └── index.vue │ │ │ ├── detail-show/ │ │ │ │ └── index.vue │ │ │ ├── dialog-pro/ │ │ │ │ └── index.vue │ │ │ ├── docker-proxy/ │ │ │ │ ├── dialog.vue │ │ │ │ ├── docker-restart.vue │ │ │ │ └── index.vue │ │ │ ├── drawer-pro/ │ │ │ │ └── index.vue │ │ │ ├── error-message/ │ │ │ │ ├── 404.vue │ │ │ │ ├── err_domain.vue │ │ │ │ ├── err_ip.vue │ │ │ │ ├── error_code.vue │ │ │ │ └── unsafe.vue │ │ │ ├── error-prompt/ │ │ │ │ └── index.vue │ │ │ ├── exist-file/ │ │ │ │ └── index.vue │ │ │ ├── file-list/ │ │ │ │ └── index.vue │ │ │ ├── file-role/ │ │ │ │ └── index.vue │ │ │ ├── group/ │ │ │ │ └── index.vue │ │ │ ├── index.ts │ │ │ ├── input-tag/ │ │ │ │ └── index.vue │ │ │ ├── layout-col/ │ │ │ │ └── form.vue │ │ │ ├── layout-content/ │ │ │ │ ├── form-button.vue │ │ │ │ ├── index.vue │ │ │ │ └── no-such-service.vue │ │ │ ├── license-import/ │ │ │ │ └── index.vue │ │ │ ├── log/ │ │ │ │ ├── compose/ │ │ │ │ │ └── index.vue │ │ │ │ ├── container/ │ │ │ │ │ └── index.vue │ │ │ │ ├── container-drawer/ │ │ │ │ │ └── index.vue │ │ │ │ ├── custom-hightlight/ │ │ │ │ │ └── index.vue │ │ │ │ ├── file/ │ │ │ │ │ └── index.vue │ │ │ │ ├── file-drawer/ │ │ │ │ │ └── index.vue │ │ │ │ └── task/ │ │ │ │ ├── index.vue │ │ │ │ └── log-without-dialog.vue │ │ │ ├── main-div/ │ │ │ │ └── index.vue │ │ │ ├── mkdown-editor/ │ │ │ │ └── index.vue │ │ │ ├── msg-info/ │ │ │ │ └── index.vue │ │ │ ├── node-select/ │ │ │ │ └── index.vue │ │ │ ├── port-jump/ │ │ │ │ └── index.vue │ │ │ ├── router-button/ │ │ │ │ └── index.vue │ │ │ ├── status/ │ │ │ │ └── index.vue │ │ │ ├── svg-icon/ │ │ │ │ └── svg-icon.vue │ │ │ ├── system-upgrade/ │ │ │ │ ├── index.vue │ │ │ │ ├── releases/ │ │ │ │ │ └── index.vue │ │ │ │ └── upgrade/ │ │ │ │ └── index.vue │ │ │ ├── table-refresh/ │ │ │ │ └── index.vue │ │ │ ├── table-search/ │ │ │ │ └── index.vue │ │ │ ├── table-setting/ │ │ │ │ └── index.vue │ │ │ ├── task-list/ │ │ │ │ └── index.vue │ │ │ ├── terminal/ │ │ │ │ ├── database.vue │ │ │ │ └── index.vue │ │ │ ├── tooltip/ │ │ │ │ └── index.vue │ │ │ ├── upload/ │ │ │ │ └── index.vue │ │ │ ├── v-charts/ │ │ │ │ ├── components/ │ │ │ │ │ ├── Line.vue │ │ │ │ │ └── Pie.vue │ │ │ │ └── index.vue │ │ │ └── vscode-open/ │ │ │ └── index.vue │ │ ├── composables/ │ │ │ └── useGlobalStore.ts │ │ ├── config/ │ │ │ ├── nprogress.ts │ │ │ └── pinia-persist.ts │ │ ├── directives/ │ │ │ ├── index.ts │ │ │ └── modules/ │ │ │ └── integer.ts │ │ ├── enums/ │ │ │ ├── app.ts │ │ │ ├── files.ts │ │ │ └── http-enum.ts │ │ ├── env.d.ts │ │ ├── global/ │ │ │ ├── bus.ts │ │ │ ├── form-rules.ts │ │ │ ├── mimetype.ts │ │ │ ├── use-logo.ts │ │ │ └── use-theme.ts │ │ ├── lang/ │ │ │ ├── index.ts │ │ │ └── modules/ │ │ │ ├── en.ts │ │ │ ├── es-es.ts │ │ │ ├── ja.ts │ │ │ ├── ko.ts │ │ │ ├── ms.ts │ │ │ ├── pt-br.ts │ │ │ ├── ru.ts │ │ │ ├── tr.ts │ │ │ ├── zh-Hant.ts │ │ │ └── zh.ts │ │ ├── layout/ │ │ │ ├── components/ │ │ │ │ ├── AppFooter.vue │ │ │ │ ├── AppMain.vue │ │ │ │ ├── MobileHeader.vue │ │ │ │ ├── Sidebar/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── Collapse.vue │ │ │ │ │ │ ├── Logo.vue │ │ │ │ │ │ └── SubItem.vue │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.vue │ │ │ │ ├── Tabs/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── TabItem.vue │ │ │ │ │ └── index.vue │ │ │ │ └── index.ts │ │ │ ├── hooks/ │ │ │ │ └── useResize.ts │ │ │ └── index.vue │ │ ├── main.ts │ │ ├── routers/ │ │ │ ├── cache-router.ts │ │ │ ├── constant.ts │ │ │ ├── index.ts │ │ │ ├── modules/ │ │ │ │ ├── ai.ts │ │ │ │ ├── app-store.ts │ │ │ │ ├── container.ts │ │ │ │ ├── cronjob.ts │ │ │ │ ├── database.ts │ │ │ │ ├── error.ts │ │ │ │ ├── host.ts │ │ │ │ ├── log.ts │ │ │ │ ├── setting.ts │ │ │ │ ├── terminal.ts │ │ │ │ ├── toolbox.ts │ │ │ │ └── website.ts │ │ │ └── router.ts │ │ ├── store/ │ │ │ ├── index.ts │ │ │ ├── interface/ │ │ │ │ └── index.ts │ │ │ └── modules/ │ │ │ ├── global.ts │ │ │ ├── menu.ts │ │ │ ├── process.ts │ │ │ ├── tabs.ts │ │ │ └── terminal.ts │ │ ├── styles/ │ │ │ ├── common.scss │ │ │ ├── element-dark.scss │ │ │ ├── element.scss │ │ │ ├── index.scss │ │ │ ├── mixins.scss │ │ │ ├── moblie.scss │ │ │ ├── reset.scss │ │ │ ├── style.css │ │ │ └── var.scss │ │ ├── typings/ │ │ │ ├── global.d.ts │ │ │ ├── plugins.d.ts │ │ │ └── window.d.ts │ │ ├── utils/ │ │ │ ├── agent.ts │ │ │ ├── app.ts │ │ │ ├── bus.ts │ │ │ ├── dashboardCache.ts │ │ │ ├── docker.ts │ │ │ ├── echarts.ts │ │ │ ├── get-env.ts │ │ │ ├── message.ts │ │ │ ├── node.ts │ │ │ ├── router.ts │ │ │ ├── runtime.ts │ │ │ ├── shortcuts.ts │ │ │ ├── svg.ts │ │ │ ├── theme.ts │ │ │ ├── util.ts │ │ │ ├── version.ts │ │ │ └── xpack.ts │ │ └── views/ │ │ ├── ai/ │ │ │ ├── agents/ │ │ │ │ ├── agent/ │ │ │ │ │ ├── add/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── terminal.vue │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── tabs/ │ │ │ │ │ │ ├── channels/ │ │ │ │ │ │ │ ├── dingtalk.vue │ │ │ │ │ │ │ ├── discord.vue │ │ │ │ │ │ │ ├── feishu.vue │ │ │ │ │ │ │ ├── qq.vue │ │ │ │ │ │ │ ├── telegram.vue │ │ │ │ │ │ │ └── wecom.vue │ │ │ │ │ │ ├── channels.vue │ │ │ │ │ │ ├── model.vue │ │ │ │ │ │ ├── settings/ │ │ │ │ │ │ │ ├── other.vue │ │ │ │ │ │ │ └── security.vue │ │ │ │ │ │ └── settings.vue │ │ │ │ │ ├── delete/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── model/ │ │ │ │ ├── add/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── pool/ │ │ │ │ └── index.vue │ │ │ ├── gpu/ │ │ │ │ ├── current/ │ │ │ │ │ └── index.vue │ │ │ │ ├── history/ │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ ├── mcp/ │ │ │ │ ├── index.vue │ │ │ │ └── server/ │ │ │ │ ├── bind/ │ │ │ │ │ └── index.vue │ │ │ │ ├── config/ │ │ │ │ │ └── index.vue │ │ │ │ ├── import/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── operate/ │ │ │ │ │ └── index.vue │ │ │ │ └── volume/ │ │ │ │ └── index.vue │ │ │ └── model/ │ │ │ ├── index.vue │ │ │ ├── ollama/ │ │ │ │ ├── add/ │ │ │ │ │ └── index.vue │ │ │ │ ├── conn/ │ │ │ │ │ └── index.vue │ │ │ │ ├── del/ │ │ │ │ │ └── index.vue │ │ │ │ ├── domain/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── terminal/ │ │ │ │ └── index.vue │ │ │ ├── router-menu.vue │ │ │ ├── tensorrt/ │ │ │ │ ├── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ └── vllm/ │ │ │ └── index.vue │ │ ├── app-store/ │ │ │ ├── apps/ │ │ │ │ ├── app/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── no-app/ │ │ │ │ └── index.vue │ │ │ ├── components/ │ │ │ │ └── tag.vue │ │ │ ├── detail/ │ │ │ │ ├── form/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── install/ │ │ │ │ │ └── index.vue │ │ │ │ └── params/ │ │ │ │ └── index.vue │ │ │ ├── index.scss │ │ │ ├── index.vue │ │ │ ├── installed/ │ │ │ │ ├── app/ │ │ │ │ │ ├── card.vue │ │ │ │ │ ├── header.vue │ │ │ │ │ ├── icon.vue │ │ │ │ │ └── info.vue │ │ │ │ ├── check/ │ │ │ │ │ └── index.vue │ │ │ │ ├── delete/ │ │ │ │ │ └── index.vue │ │ │ │ ├── detail/ │ │ │ │ │ └── index.vue │ │ │ │ ├── ignore/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── upgrade/ │ │ │ │ ├── diff/ │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ └── setting/ │ │ │ └── index.vue │ │ ├── container/ │ │ │ ├── compose/ │ │ │ │ ├── delete/ │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ ├── container/ │ │ │ │ ├── commit/ │ │ │ │ │ └── index.vue │ │ │ │ ├── file-browser/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── inspect/ │ │ │ │ │ └── index.vue │ │ │ │ ├── monitor/ │ │ │ │ │ └── index.vue │ │ │ │ ├── operate/ │ │ │ │ │ ├── confirm.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── network.vue │ │ │ │ │ └── volume.vue │ │ │ │ ├── prune/ │ │ │ │ │ └── index.vue │ │ │ │ ├── rename/ │ │ │ │ │ └── index.vue │ │ │ │ ├── terminal/ │ │ │ │ │ └── index.vue │ │ │ │ └── upgrade/ │ │ │ │ └── index.vue │ │ │ ├── dashboard/ │ │ │ │ └── index.vue │ │ │ ├── docker-status/ │ │ │ │ └── index.vue │ │ │ ├── image/ │ │ │ │ ├── build/ │ │ │ │ │ └── index.vue │ │ │ │ ├── delete/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── load/ │ │ │ │ │ └── index.vue │ │ │ │ ├── prune/ │ │ │ │ │ └── index.vue │ │ │ │ ├── pull/ │ │ │ │ │ └── index.vue │ │ │ │ ├── push/ │ │ │ │ │ └── index.vue │ │ │ │ ├── save/ │ │ │ │ │ └── index.vue │ │ │ │ └── tag/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── network/ │ │ │ │ ├── create/ │ │ │ │ │ └── index.vue │ │ │ │ ├── detail/ │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ ├── repo/ │ │ │ │ ├── index.vue │ │ │ │ └── operator/ │ │ │ │ └── index.vue │ │ │ ├── setting/ │ │ │ │ ├── index.vue │ │ │ │ ├── ipv6/ │ │ │ │ │ └── index.vue │ │ │ │ ├── log/ │ │ │ │ │ └── index.vue │ │ │ │ ├── mirror/ │ │ │ │ │ └── index.vue │ │ │ │ ├── registry/ │ │ │ │ │ └── index.vue │ │ │ │ └── sock-path/ │ │ │ │ └── index.vue │ │ │ ├── template/ │ │ │ │ ├── detail/ │ │ │ │ │ └── index.vue │ │ │ │ ├── import/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── operator/ │ │ │ │ └── index.vue │ │ │ └── volume/ │ │ │ ├── create/ │ │ │ │ └── index.vue │ │ │ └── index.vue │ │ ├── cronjob/ │ │ │ ├── cronjob/ │ │ │ │ ├── backup/ │ │ │ │ │ └── index.vue │ │ │ │ ├── config/ │ │ │ │ │ └── clean-log.vue │ │ │ │ ├── helper.ts │ │ │ │ ├── import/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── operate/ │ │ │ │ │ └── index.vue │ │ │ │ └── record/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ └── library/ │ │ │ ├── index.vue │ │ │ ├── operate/ │ │ │ │ └── index.vue │ │ │ └── run/ │ │ │ └── index.vue │ │ ├── database/ │ │ │ ├── index.vue │ │ │ ├── mysql/ │ │ │ │ ├── bind/ │ │ │ │ │ └── index.vue │ │ │ │ ├── check/ │ │ │ │ │ └── index.vue │ │ │ │ ├── conn/ │ │ │ │ │ └── index.vue │ │ │ │ ├── create/ │ │ │ │ │ └── index.vue │ │ │ │ ├── delete/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── password/ │ │ │ │ │ └── index.vue │ │ │ │ ├── remote/ │ │ │ │ │ ├── delete/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── operate/ │ │ │ │ │ └── index.vue │ │ │ │ └── setting/ │ │ │ │ ├── helper.ts │ │ │ │ ├── index.vue │ │ │ │ ├── slow-log/ │ │ │ │ │ └── index.vue │ │ │ │ ├── status/ │ │ │ │ │ └── index.vue │ │ │ │ └── variables/ │ │ │ │ └── index.vue │ │ │ ├── postgresql/ │ │ │ │ ├── bind/ │ │ │ │ │ └── index.vue │ │ │ │ ├── check/ │ │ │ │ │ └── index.vue │ │ │ │ ├── conn/ │ │ │ │ │ └── index.vue │ │ │ │ ├── create/ │ │ │ │ │ └── index.vue │ │ │ │ ├── delete/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── password/ │ │ │ │ │ └── index.vue │ │ │ │ ├── privileges/ │ │ │ │ │ └── index.vue │ │ │ │ ├── remote/ │ │ │ │ │ ├── delete/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── operate/ │ │ │ │ │ └── index.vue │ │ │ │ └── setting/ │ │ │ │ └── index.vue │ │ │ └── redis/ │ │ │ ├── check/ │ │ │ │ └── index.vue │ │ │ ├── command/ │ │ │ │ └── index.vue │ │ │ ├── conn/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── remote/ │ │ │ │ ├── delete/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ └── setting/ │ │ │ ├── index.vue │ │ │ ├── persistence/ │ │ │ │ └── index.vue │ │ │ └── status/ │ │ │ └── index.vue │ │ ├── home/ │ │ │ ├── app/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── quick/ │ │ │ │ └── index.vue │ │ │ └── status/ │ │ │ └── index.vue │ │ ├── host/ │ │ │ ├── disk-management/ │ │ │ │ ├── components/ │ │ │ │ │ └── disk-card.vue │ │ │ │ ├── disk/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── partition/ │ │ │ │ └── index.vue │ │ │ ├── file-management/ │ │ │ │ ├── batch-role/ │ │ │ │ │ └── index.vue │ │ │ │ ├── change-role/ │ │ │ │ │ └── index.vue │ │ │ │ ├── chown/ │ │ │ │ │ └── index.vue │ │ │ │ ├── code-editor/ │ │ │ │ │ ├── index.vue │ │ │ │ │ └── tabs/ │ │ │ │ │ └── index.vue │ │ │ │ ├── compress/ │ │ │ │ │ └── index.vue │ │ │ │ ├── convert/ │ │ │ │ │ └── index.vue │ │ │ │ ├── create/ │ │ │ │ │ └── index.vue │ │ │ │ ├── decompress/ │ │ │ │ │ └── index.vue │ │ │ │ ├── delete/ │ │ │ │ │ └── index.vue │ │ │ │ ├── detail/ │ │ │ │ │ └── index.vue │ │ │ │ ├── download/ │ │ │ │ │ └── index.vue │ │ │ │ ├── favorite/ │ │ │ │ │ └── index.vue │ │ │ │ ├── hooks/ │ │ │ │ │ └── searchable.ts │ │ │ │ ├── index.vue │ │ │ │ ├── move/ │ │ │ │ │ └── index.vue │ │ │ │ ├── preview/ │ │ │ │ │ └── index.vue │ │ │ │ ├── process/ │ │ │ │ │ └── index.vue │ │ │ │ ├── recycle-bin/ │ │ │ │ │ ├── delete/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── reduce/ │ │ │ │ │ └── index.vue │ │ │ │ ├── rename/ │ │ │ │ │ └── index.vue │ │ │ │ ├── terminal/ │ │ │ │ │ └── index.vue │ │ │ │ ├── text-preview/ │ │ │ │ │ └── index.vue │ │ │ │ ├── upload/ │ │ │ │ │ └── index.vue │ │ │ │ └── wget/ │ │ │ │ └── index.vue │ │ │ ├── firewall/ │ │ │ │ ├── advance/ │ │ │ │ │ ├── index.vue │ │ │ │ │ └── operate/ │ │ │ │ │ └── index.vue │ │ │ │ ├── forward/ │ │ │ │ │ ├── import/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── operate/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── ip/ │ │ │ │ │ ├── import/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── operate/ │ │ │ │ │ └── index.vue │ │ │ │ ├── port/ │ │ │ │ │ ├── import/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── operate/ │ │ │ │ │ └── index.vue │ │ │ │ └── status/ │ │ │ │ └── index.vue │ │ │ ├── monitor/ │ │ │ │ ├── index.vue │ │ │ │ ├── monitor/ │ │ │ │ │ └── index.vue │ │ │ │ └── setting/ │ │ │ │ ├── days/ │ │ │ │ │ └── index.vue │ │ │ │ ├── default-io/ │ │ │ │ │ └── index.vue │ │ │ │ ├── default-network/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── interval/ │ │ │ │ └── index.vue │ │ │ ├── process/ │ │ │ │ ├── index.vue │ │ │ │ ├── network/ │ │ │ │ │ └── index.vue │ │ │ │ └── process/ │ │ │ │ ├── detail/ │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ └── ssh/ │ │ │ ├── index.vue │ │ │ ├── log/ │ │ │ │ ├── index.vue │ │ │ │ └── log.vue │ │ │ ├── session/ │ │ │ │ └── index.vue │ │ │ └── ssh/ │ │ │ ├── address/ │ │ │ │ └── index.vue │ │ │ ├── auth-keys/ │ │ │ │ └── index.vue │ │ │ ├── certification/ │ │ │ │ ├── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── port/ │ │ │ │ └── index.vue │ │ │ └── root/ │ │ │ └── index.vue │ │ ├── log/ │ │ │ ├── index.vue │ │ │ ├── login/ │ │ │ │ └── index.vue │ │ │ ├── operation/ │ │ │ │ └── index.vue │ │ │ ├── router/ │ │ │ │ └── index.vue │ │ │ ├── system/ │ │ │ │ └── index.vue │ │ │ ├── task/ │ │ │ │ └── index.vue │ │ │ └── website/ │ │ │ └── index.vue │ │ ├── login/ │ │ │ ├── components/ │ │ │ │ └── login-form.vue │ │ │ └── index.vue │ │ ├── setting/ │ │ │ ├── about/ │ │ │ │ └── index.vue │ │ │ ├── alert/ │ │ │ │ ├── dash/ │ │ │ │ │ ├── index.vue │ │ │ │ │ └── task/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── log/ │ │ │ │ │ └── index.vue │ │ │ │ └── setting/ │ │ │ │ ├── email/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── phone/ │ │ │ │ │ └── index.vue │ │ │ │ ├── time-range/ │ │ │ │ │ └── index.vue │ │ │ │ └── webhook/ │ │ │ │ └── index.vue │ │ │ ├── backup-account/ │ │ │ │ ├── helper.ts │ │ │ │ ├── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ ├── expired.vue │ │ │ ├── index.vue │ │ │ ├── license/ │ │ │ │ ├── bind/ │ │ │ │ │ ├── free.vue │ │ │ │ │ └── xpack.vue │ │ │ │ └── index.vue │ │ │ ├── panel/ │ │ │ │ ├── api-interface/ │ │ │ │ │ └── index.vue │ │ │ │ ├── edition/ │ │ │ │ │ └── index.vue │ │ │ │ ├── hidemenu/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── name/ │ │ │ │ │ └── index.vue │ │ │ │ ├── password/ │ │ │ │ │ └── index.vue │ │ │ │ ├── proxy/ │ │ │ │ │ └── index.vue │ │ │ │ ├── systemip/ │ │ │ │ │ └── index.vue │ │ │ │ ├── theme-color/ │ │ │ │ │ └── index.vue │ │ │ │ ├── timeout/ │ │ │ │ │ └── index.vue │ │ │ │ ├── username/ │ │ │ │ │ └── index.vue │ │ │ │ └── watermark/ │ │ │ │ └── index.vue │ │ │ ├── safe/ │ │ │ │ ├── allowips/ │ │ │ │ │ └── index.vue │ │ │ │ ├── bind/ │ │ │ │ │ └── index.vue │ │ │ │ ├── domain/ │ │ │ │ │ └── index.vue │ │ │ │ ├── entrance/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── mfa/ │ │ │ │ │ └── index.vue │ │ │ │ ├── passkey/ │ │ │ │ │ └── index.vue │ │ │ │ ├── port/ │ │ │ │ │ └── index.vue │ │ │ │ ├── response/ │ │ │ │ │ └── index.vue │ │ │ │ ├── ssl/ │ │ │ │ │ └── index.vue │ │ │ │ └── timeout/ │ │ │ │ └── index.vue │ │ │ └── snapshot/ │ │ │ ├── create/ │ │ │ │ └── index.vue │ │ │ ├── import/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── recover/ │ │ │ │ └── index.vue │ │ │ └── status/ │ │ │ └── index.vue │ │ ├── terminal/ │ │ │ ├── command/ │ │ │ │ ├── import/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ ├── host/ │ │ │ │ ├── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── setting/ │ │ │ │ ├── ai/ │ │ │ │ │ ├── helper.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── default_conn/ │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ └── terminal/ │ │ │ ├── host-create.vue │ │ │ └── index.vue │ │ ├── toolbox/ │ │ │ ├── clam/ │ │ │ │ ├── index.vue │ │ │ │ ├── operate/ │ │ │ │ │ └── index.vue │ │ │ │ ├── record/ │ │ │ │ │ └── index.vue │ │ │ │ ├── setting/ │ │ │ │ │ └── index.vue │ │ │ │ └── status/ │ │ │ │ └── index.vue │ │ │ ├── clean/ │ │ │ │ └── index.vue │ │ │ ├── device/ │ │ │ │ ├── dns/ │ │ │ │ │ └── index.vue │ │ │ │ ├── hostname/ │ │ │ │ │ └── index.vue │ │ │ │ ├── hosts/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── ntp/ │ │ │ │ │ └── index.vue │ │ │ │ ├── passwd/ │ │ │ │ │ └── index.vue │ │ │ │ ├── swap/ │ │ │ │ │ └── index.vue │ │ │ │ └── time-zone/ │ │ │ │ └── index.vue │ │ │ ├── fail2ban/ │ │ │ │ ├── ban-action/ │ │ │ │ │ └── index.vue │ │ │ │ ├── ban-time/ │ │ │ │ │ └── index.vue │ │ │ │ ├── find-time/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── ips/ │ │ │ │ │ └── index.vue │ │ │ │ ├── log-path/ │ │ │ │ │ └── index.vue │ │ │ │ ├── max-retry/ │ │ │ │ │ └── index.vue │ │ │ │ └── port/ │ │ │ │ └── index.vue │ │ │ ├── ftp/ │ │ │ │ ├── index.vue │ │ │ │ ├── log/ │ │ │ │ │ └── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ └── supervisor/ │ │ │ ├── config/ │ │ │ │ ├── basic/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── source/ │ │ │ │ └── index.vue │ │ │ ├── create/ │ │ │ │ └── index.vue │ │ │ ├── file/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── log/ │ │ │ │ └── index.vue │ │ │ └── status/ │ │ │ ├── index.vue │ │ │ └── init/ │ │ │ └── index.vue │ │ └── website/ │ │ ├── runtime/ │ │ │ ├── app/ │ │ │ │ └── index.vue │ │ │ ├── common/ │ │ │ │ └── utils.ts │ │ │ ├── components/ │ │ │ │ ├── dir/ │ │ │ │ │ └── index.vue │ │ │ │ ├── environment/ │ │ │ │ │ └── index.vue │ │ │ │ ├── extra_hosts/ │ │ │ │ │ └── index.vue │ │ │ │ ├── node-config.vue │ │ │ │ ├── port/ │ │ │ │ │ └── index.vue │ │ │ │ ├── port-jump.vue │ │ │ │ ├── runtime-status.vue │ │ │ │ ├── terminal.vue │ │ │ │ └── volume/ │ │ │ │ └── index.vue │ │ │ ├── delete/ │ │ │ │ └── index.vue │ │ │ ├── dotnet/ │ │ │ │ ├── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ ├── go/ │ │ │ │ ├── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── java/ │ │ │ │ ├── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ ├── node/ │ │ │ │ ├── index.vue │ │ │ │ ├── module/ │ │ │ │ │ └── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ ├── php/ │ │ │ │ ├── check/ │ │ │ │ │ └── index.vue │ │ │ │ ├── config/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── container/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── fpm-status/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── function/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── performance/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── php-fpm/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── slow-log/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── timeout/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── upload/ │ │ │ │ │ └── index.vue │ │ │ │ ├── create/ │ │ │ │ │ └── index.vue │ │ │ │ ├── extension-management/ │ │ │ │ │ └── index.vue │ │ │ │ ├── extension-template/ │ │ │ │ │ ├── index.vue │ │ │ │ │ └── operate/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── supervisor/ │ │ │ │ ├── create/ │ │ │ │ │ └── index.vue │ │ │ │ ├── file/ │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ └── python/ │ │ │ ├── index.vue │ │ │ └── operate/ │ │ │ └── index.vue │ │ ├── ssl/ │ │ │ ├── acme-account/ │ │ │ │ ├── create/ │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ ├── apply/ │ │ │ │ └── index.vue │ │ │ ├── ca/ │ │ │ │ ├── create/ │ │ │ │ │ └── index.vue │ │ │ │ ├── detail/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── obtain/ │ │ │ │ └── index.vue │ │ │ ├── create/ │ │ │ │ └── index.vue │ │ │ ├── detail/ │ │ │ │ └── index.vue │ │ │ ├── dns-account/ │ │ │ │ ├── create/ │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── obtain/ │ │ │ │ └── index.vue │ │ │ └── upload/ │ │ │ └── index.vue │ │ └── website/ │ │ ├── batch-op/ │ │ │ ├── group.vue │ │ │ └── https.vue │ │ ├── check/ │ │ │ └── index.vue │ │ ├── components/ │ │ │ ├── group/ │ │ │ │ └── index.vue │ │ │ ├── https/ │ │ │ │ └── index.vue │ │ │ └── website-ssl/ │ │ │ └── index.vue │ │ ├── config/ │ │ │ ├── basic/ │ │ │ │ ├── anti-Leech/ │ │ │ │ │ └── index.vue │ │ │ │ ├── auth-basic/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── cors/ │ │ │ │ │ └── index.vue │ │ │ │ ├── default-doc/ │ │ │ │ │ └── index.vue │ │ │ │ ├── domain/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── https/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ ├── limit-conn/ │ │ │ │ │ └── index.vue │ │ │ │ ├── load-balance/ │ │ │ │ │ ├── file/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── form/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── operate/ │ │ │ │ │ └── index.vue │ │ │ │ ├── other/ │ │ │ │ │ └── index.vue │ │ │ │ ├── php/ │ │ │ │ │ ├── composer/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── proxy/ │ │ │ │ │ ├── cache/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── create/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── file/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── real-ip/ │ │ │ │ │ └── index.vue │ │ │ │ ├── redirect/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── file/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── resource/ │ │ │ │ │ └── index.vue │ │ │ │ ├── rewrite/ │ │ │ │ │ ├── custom/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── site-folder/ │ │ │ │ │ └── index.vue │ │ │ │ └── stream/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── log/ │ │ │ │ ├── index.vue │ │ │ │ └── log-fiile/ │ │ │ │ └── index.vue │ │ │ └── resource/ │ │ │ ├── index.vue │ │ │ └── nginx/ │ │ │ └── index.vue │ │ ├── cors/ │ │ │ └── index.vue │ │ ├── create/ │ │ │ ├── index.vue │ │ │ └── site-alert/ │ │ │ └── index.vue │ │ ├── default/ │ │ │ └── index.vue │ │ ├── delete/ │ │ │ └── index.vue │ │ ├── domain/ │ │ │ └── index.vue │ │ ├── domain-create/ │ │ │ └── index.vue │ │ ├── html/ │ │ │ └── index.vue │ │ ├── index.vue │ │ ├── nginx/ │ │ │ ├── index.vue │ │ │ ├── module/ │ │ │ │ ├── build/ │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── operate/ │ │ │ │ └── index.vue │ │ │ ├── other/ │ │ │ │ ├── https/ │ │ │ │ │ └── index.vue │ │ │ │ └── index.vue │ │ │ ├── performance/ │ │ │ │ └── index.vue │ │ │ ├── source/ │ │ │ │ └── index.vue │ │ │ └── status/ │ │ │ └── index.vue │ │ └── status/ │ │ └── index.vue │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── vite-env.d.ts │ └── vite.config.ts └── sonar-project.properties
Showing preview only (628K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (7280 symbols across 692 files)
FILE: agent/app/api/v2/agents.go
method CreateAgent (line 17) | func (b *BaseApi) CreateAgent(c *gin.Context) {
method PageAgents (line 38) | func (b *BaseApi) PageAgents(c *gin.Context) {
method DeleteAgent (line 62) | func (b *BaseApi) DeleteAgent(c *gin.Context) {
method ResetAgentToken (line 82) | func (b *BaseApi) ResetAgentToken(c *gin.Context) {
method UpdateAgentModelConfig (line 102) | func (b *BaseApi) UpdateAgentModelConfig(c *gin.Context) {
method GetAgentProviders (line 120) | func (b *BaseApi) GetAgentProviders(c *gin.Context) {
method CreateAgentAccount (line 137) | func (b *BaseApi) CreateAgentAccount(c *gin.Context) {
method UpdateAgentAccount (line 157) | func (b *BaseApi) UpdateAgentAccount(c *gin.Context) {
method PageAgentAccounts (line 177) | func (b *BaseApi) PageAgentAccounts(c *gin.Context) {
method GetAgentAccountModels (line 201) | func (b *BaseApi) GetAgentAccountModels(c *gin.Context) {
method CreateAgentAccountModel (line 222) | func (b *BaseApi) CreateAgentAccountModel(c *gin.Context) {
method UpdateAgentAccountModel (line 242) | func (b *BaseApi) UpdateAgentAccountModel(c *gin.Context) {
method DeleteAgentAccountModel (line 262) | func (b *BaseApi) DeleteAgentAccountModel(c *gin.Context) {
method VerifyAgentAccount (line 282) | func (b *BaseApi) VerifyAgentAccount(c *gin.Context) {
method DeleteAgentAccount (line 302) | func (b *BaseApi) DeleteAgentAccount(c *gin.Context) {
method GetAgentFeishuConfig (line 322) | func (b *BaseApi) GetAgentFeishuConfig(c *gin.Context) {
method UpdateAgentFeishuConfig (line 343) | func (b *BaseApi) UpdateAgentFeishuConfig(c *gin.Context) {
method GetAgentTelegramConfig (line 363) | func (b *BaseApi) GetAgentTelegramConfig(c *gin.Context) {
method UpdateAgentTelegramConfig (line 384) | func (b *BaseApi) UpdateAgentTelegramConfig(c *gin.Context) {
method GetAgentDiscordConfig (line 404) | func (b *BaseApi) GetAgentDiscordConfig(c *gin.Context) {
method UpdateAgentDiscordConfig (line 425) | func (b *BaseApi) UpdateAgentDiscordConfig(c *gin.Context) {
method GetAgentWecomConfig (line 445) | func (b *BaseApi) GetAgentWecomConfig(c *gin.Context) {
method UpdateAgentWecomConfig (line 466) | func (b *BaseApi) UpdateAgentWecomConfig(c *gin.Context) {
method GetAgentDingTalkConfig (line 486) | func (b *BaseApi) GetAgentDingTalkConfig(c *gin.Context) {
method UpdateAgentDingTalkConfig (line 507) | func (b *BaseApi) UpdateAgentDingTalkConfig(c *gin.Context) {
method GetAgentQQBotConfig (line 527) | func (b *BaseApi) GetAgentQQBotConfig(c *gin.Context) {
method UpdateAgentQQBotConfig (line 548) | func (b *BaseApi) UpdateAgentQQBotConfig(c *gin.Context) {
method InstallAgentPlugin (line 568) | func (b *BaseApi) InstallAgentPlugin(c *gin.Context) {
method CheckAgentPlugin (line 588) | func (b *BaseApi) CheckAgentPlugin(c *gin.Context) {
method GetAgentSecurityConfig (line 609) | func (b *BaseApi) GetAgentSecurityConfig(c *gin.Context) {
method UpdateAgentSecurityConfig (line 630) | func (b *BaseApi) UpdateAgentSecurityConfig(c *gin.Context) {
method GetAgentOtherConfig (line 650) | func (b *BaseApi) GetAgentOtherConfig(c *gin.Context) {
method UpdateAgentOtherConfig (line 671) | func (b *BaseApi) UpdateAgentOtherConfig(c *gin.Context) {
method ApproveAgentChannelPairing (line 691) | func (b *BaseApi) ApproveAgentChannelPairing(c *gin.Context) {
FILE: agent/app/api/v2/ai.go
method CreateOllamaModel (line 21) | func (b *BaseApi) CreateOllamaModel(c *gin.Context) {
method RecreateOllamaModel (line 43) | func (b *BaseApi) RecreateOllamaModel(c *gin.Context) {
method CloseOllamaModel (line 65) | func (b *BaseApi) CloseOllamaModel(c *gin.Context) {
method SyncOllamaModel (line 85) | func (b *BaseApi) SyncOllamaModel(c *gin.Context) {
method SearchOllamaModel (line 102) | func (b *BaseApi) SearchOllamaModel(c *gin.Context) {
method LoadOllamaModelDetail (line 128) | func (b *BaseApi) LoadOllamaModelDetail(c *gin.Context) {
method DeleteOllamaModel (line 152) | func (b *BaseApi) DeleteOllamaModel(c *gin.Context) {
method LoadGpuInfo (line 173) | func (b *BaseApi) LoadGpuInfo(c *gin.Context) {
method BindDomain (line 205) | func (b *BaseApi) BindDomain(c *gin.Context) {
method GetBindDomain (line 225) | func (b *BaseApi) GetBindDomain(c *gin.Context) {
method UpdateBindDomain (line 246) | func (b *BaseApi) UpdateBindDomain(c *gin.Context) {
FILE: agent/app/api/v2/alert.go
method PageAlert (line 10) | func (b *BaseApi) PageAlert(c *gin.Context) {
method GetAlerts (line 26) | func (b *BaseApi) GetAlerts(c *gin.Context) {
method CreateAlert (line 35) | func (b *BaseApi) CreateAlert(c *gin.Context) {
method DeleteAlert (line 48) | func (b *BaseApi) DeleteAlert(c *gin.Context) {
method UpdateAlert (line 61) | func (b *BaseApi) UpdateAlert(c *gin.Context) {
method GetAlert (line 73) | func (b *BaseApi) GetAlert(c *gin.Context) {
method UpdateAlertStatus (line 87) | func (b *BaseApi) UpdateAlertStatus(c *gin.Context) {
method GetDisks (line 100) | func (b *BaseApi) GetDisks(c *gin.Context) {
method PageAlertLogs (line 109) | func (b *BaseApi) PageAlertLogs(c *gin.Context) {
method CleanAlertLogs (line 125) | func (b *BaseApi) CleanAlertLogs(c *gin.Context) {
method GetClams (line 133) | func (b *BaseApi) GetClams(c *gin.Context) {
method GetCronJobs (line 142) | func (b *BaseApi) GetCronJobs(c *gin.Context) {
method GetAlertConfig (line 155) | func (b *BaseApi) GetAlertConfig(c *gin.Context) {
method UpdateAlertConfig (line 164) | func (b *BaseApi) UpdateAlertConfig(c *gin.Context) {
method DeleteAlertConfig (line 176) | func (b *BaseApi) DeleteAlertConfig(c *gin.Context) {
method TestAlertConfig (line 189) | func (b *BaseApi) TestAlertConfig(c *gin.Context) {
FILE: agent/app/api/v2/app.go
method SearchApp (line 22) | func (b *BaseApi) SearchApp(c *gin.Context) {
method SyncApp (line 42) | func (b *BaseApi) SyncApp(c *gin.Context) {
method SyncLocalApp (line 74) | func (b *BaseApi) SyncLocalApp(c *gin.Context) {
method GetApp (line 91) | func (b *BaseApi) GetApp(c *gin.Context) {
method GetAppDetail (line 115) | func (b *BaseApi) GetAppDetail(c *gin.Context) {
method GetAppDetailByID (line 139) | func (b *BaseApi) GetAppDetailByID(c *gin.Context) {
method InstallApp (line 162) | func (b *BaseApi) InstallApp(c *gin.Context) {
method GetAppTags (line 175) | func (b *BaseApi) GetAppTags(c *gin.Context) {
method GetAppListUpdate (line 190) | func (b *BaseApi) GetAppListUpdate(c *gin.Context) {
method GetAppIcon (line 207) | func (b *BaseApi) GetAppIcon(c *gin.Context) {
method GetAppDetailForNode (line 246) | func (b *BaseApi) GetAppDetailForNode(c *gin.Context) {
FILE: agent/app/api/v2/app_ignore_upgrade.go
method ListAppIgnored (line 16) | func (b *BaseApi) ListAppIgnored(c *gin.Context) {
method IgnoreAppUpgrade (line 34) | func (b *BaseApi) IgnoreAppUpgrade(c *gin.Context) {
method CancelIgnoreAppUpgrade (line 56) | func (b *BaseApi) CancelIgnoreAppUpgrade(c *gin.Context) {
FILE: agent/app/api/v2/app_install.go
method SearchAppInstalled (line 19) | func (b *BaseApi) SearchAppInstalled(c *gin.Context) {
method ListAppInstalled (line 54) | func (b *BaseApi) ListAppInstalled(c *gin.Context) {
method CheckAppInstalled (line 71) | func (b *BaseApi) CheckAppInstalled(c *gin.Context) {
method LoadPort (line 92) | func (b *BaseApi) LoadPort(c *gin.Context) {
method LoadConnInfo (line 113) | func (b *BaseApi) LoadConnInfo(c *gin.Context) {
method DeleteCheck (line 134) | func (b *BaseApi) DeleteCheck(c *gin.Context) {
method SyncInstalled (line 156) | func (b *BaseApi) SyncInstalled(c *gin.Context) {
method OperateInstalled (line 173) | func (b *BaseApi) OperateInstalled(c *gin.Context) {
method GetServices (line 193) | func (b *BaseApi) GetServices(c *gin.Context) {
method GetUpdateVersions (line 211) | func (b *BaseApi) GetUpdateVersions(c *gin.Context) {
method ChangeAppPort (line 233) | func (b *BaseApi) ChangeAppPort(c *gin.Context) {
method GetDefaultConfig (line 253) | func (b *BaseApi) GetDefaultConfig(c *gin.Context) {
method GetParams (line 275) | func (b *BaseApi) GetParams(c *gin.Context) {
method UpdateInstalled (line 298) | func (b *BaseApi) UpdateInstalled(c *gin.Context) {
method UpdateAppConfig (line 319) | func (b *BaseApi) UpdateAppConfig(c *gin.Context) {
method GetAppInstallInfo (line 339) | func (b *BaseApi) GetAppInstallInfo(c *gin.Context) {
method UpdateAppInstallSort (line 353) | func (b *BaseApi) UpdateAppInstallSort(c *gin.Context) {
FILE: agent/app/api/v2/backup.go
method CheckBackupUsed (line 13) | func (b *BaseApi) CheckBackupUsed(c *gin.Context) {
method CheckBackup (line 36) | func (b *BaseApi) CheckBackup(c *gin.Context) {
method CreateBackup (line 54) | func (b *BaseApi) CreateBackup(c *gin.Context) {
method RefreshToken (line 75) | func (b *BaseApi) RefreshToken(c *gin.Context) {
method ListBuckets (line 95) | func (b *BaseApi) ListBuckets(c *gin.Context) {
method DeleteBackup (line 118) | func (b *BaseApi) DeleteBackup(c *gin.Context) {
method UpdateBackup (line 140) | func (b *BaseApi) UpdateBackup(c *gin.Context) {
method UploadForRecover (line 162) | func (b *BaseApi) UploadForRecover(c *gin.Context) {
method LoadBackupOptions (line 182) | func (b *BaseApi) LoadBackupOptions(c *gin.Context) {
method SearchBackup (line 199) | func (b *BaseApi) SearchBackup(c *gin.Context) {
method GetLocalDir (line 223) | func (b *BaseApi) GetLocalDir(c *gin.Context) {
method LoadBackupRecordSize (line 241) | func (b *BaseApi) LoadBackupRecordSize(c *gin.Context) {
method SearchBackupRecords (line 264) | func (b *BaseApi) SearchBackupRecords(c *gin.Context) {
method SearchBackupRecordsByCronjob (line 290) | func (b *BaseApi) SearchBackupRecordsByCronjob(c *gin.Context) {
method DownloadRecord (line 317) | func (b *BaseApi) DownloadRecord(c *gin.Context) {
method UpdateRecordDescription (line 339) | func (b *BaseApi) UpdateRecordDescription(c *gin.Context) {
method DeleteBackupRecord (line 361) | func (b *BaseApi) DeleteBackupRecord(c *gin.Context) {
method LoadFilesFromBackup (line 382) | func (b *BaseApi) LoadFilesFromBackup(c *gin.Context) {
method Backup (line 401) | func (b *BaseApi) Backup(c *gin.Context) {
method Recover (line 456) | func (b *BaseApi) Recover(c *gin.Context) {
method RecoverByUpload (line 521) | func (b *BaseApi) RecoverByUpload(c *gin.Context) {
FILE: agent/app/api/v2/clam.go
method CreateClam (line 18) | func (b *BaseApi) CreateClam(c *gin.Context) {
method UpdateClam (line 40) | func (b *BaseApi) UpdateClam(c *gin.Context) {
method UpdateClamStatus (line 62) | func (b *BaseApi) UpdateClamStatus(c *gin.Context) {
method SearchClam (line 83) | func (b *BaseApi) SearchClam(c *gin.Context) {
method LoadClamBaseInfo (line 108) | func (b *BaseApi) LoadClamBaseInfo(c *gin.Context) {
method OperateClam (line 127) | func (b *BaseApi) OperateClam(c *gin.Context) {
method CleanClamRecord (line 150) | func (b *BaseApi) CleanClamRecord(c *gin.Context) {
method SearchClamRecord (line 171) | func (b *BaseApi) SearchClamRecord(c *gin.Context) {
method SearchClamFile (line 197) | func (b *BaseApi) SearchClamFile(c *gin.Context) {
method UpdateFile (line 220) | func (b *BaseApi) UpdateFile(c *gin.Context) {
method DeleteClam (line 241) | func (b *BaseApi) DeleteClam(c *gin.Context) {
method HandleClamScan (line 263) | func (b *BaseApi) HandleClamScan(c *gin.Context) {
FILE: agent/app/api/v2/compose_template.go
method CreateComposeTemplate (line 18) | func (b *BaseApi) CreateComposeTemplate(c *gin.Context) {
method BatchComposeTemplate (line 40) | func (b *BaseApi) BatchComposeTemplate(c *gin.Context) {
method SearchComposeTemplate (line 62) | func (b *BaseApi) SearchComposeTemplate(c *gin.Context) {
method ListComposeTemplate (line 87) | func (b *BaseApi) ListComposeTemplate(c *gin.Context) {
method DeleteComposeTemplate (line 106) | func (b *BaseApi) DeleteComposeTemplate(c *gin.Context) {
method UpdateComposeTemplate (line 128) | func (b *BaseApi) UpdateComposeTemplate(c *gin.Context) {
FILE: agent/app/api/v2/container.go
method SearchContainer (line 24) | func (b *BaseApi) SearchContainer(c *gin.Context) {
method LoadContainerUsers (line 50) | func (b *BaseApi) LoadContainerUsers(c *gin.Context) {
method ListContainerFiles (line 67) | func (b *BaseApi) ListContainerFiles(c *gin.Context) {
method UploadContainerFile (line 91) | func (b *BaseApi) UploadContainerFile(c *gin.Context) {
method GetContainerFileContent (line 132) | func (b *BaseApi) GetContainerFileContent(c *gin.Context) {
method GetContainerFileSize (line 153) | func (b *BaseApi) GetContainerFileSize(c *gin.Context) {
method DeleteContainerFile (line 175) | func (b *BaseApi) DeleteContainerFile(c *gin.Context) {
method DownloadContainerFile (line 195) | func (b *BaseApi) DownloadContainerFile(c *gin.Context) {
method ListContainer (line 223) | func (b *BaseApi) ListContainer(c *gin.Context) {
method ListContainerByImage (line 235) | func (b *BaseApi) ListContainerByImage(c *gin.Context) {
method LoadContainerStatus (line 252) | func (b *BaseApi) LoadContainerStatus(c *gin.Context) {
method SearchCompose (line 269) | func (b *BaseApi) SearchCompose(c *gin.Context) {
method TestCompose (line 295) | func (b *BaseApi) TestCompose(c *gin.Context) {
method CreateCompose (line 318) | func (b *BaseApi) CreateCompose(c *gin.Context) {
method OperatorCompose (line 340) | func (b *BaseApi) OperatorCompose(c *gin.Context) {
method ContainerUpdate (line 362) | func (b *BaseApi) ContainerUpdate(c *gin.Context) {
method ContainerInfo (line 383) | func (b *BaseApi) ContainerInfo(c *gin.Context) {
method LoadResourceLimit (line 402) | func (b *BaseApi) LoadResourceLimit(c *gin.Context) {
method ContainerListStats (line 416) | func (b *BaseApi) ContainerListStats(c *gin.Context) {
method ContainerItemStats (line 432) | func (b *BaseApi) ContainerItemStats(c *gin.Context) {
method ContainerCreate (line 455) | func (b *BaseApi) ContainerCreate(c *gin.Context) {
method ContainerUpgrade (line 477) | func (b *BaseApi) ContainerUpgrade(c *gin.Context) {
method ContainerPrune (line 499) | func (b *BaseApi) ContainerPrune(c *gin.Context) {
method CleanContainerLog (line 521) | func (b *BaseApi) CleanContainerLog(c *gin.Context) {
method CleanComposeLog (line 543) | func (b *BaseApi) CleanComposeLog(c *gin.Context) {
method ContainerRename (line 565) | func (b *BaseApi) ContainerRename(c *gin.Context) {
method ContainerCommit (line 586) | func (b *BaseApi) ContainerCommit(c *gin.Context) {
method ContainerOperation (line 608) | func (b *BaseApi) ContainerOperation(c *gin.Context) {
method ContainerStats (line 628) | func (b *BaseApi) ContainerStats(c *gin.Context) {
method Inspect (line 651) | func (b *BaseApi) Inspect(c *gin.Context) {
method DownloadContainerLogs (line 665) | func (b *BaseApi) DownloadContainerLogs(c *gin.Context) {
method SearchNetwork (line 685) | func (b *BaseApi) SearchNetwork(c *gin.Context) {
method ListNetwork (line 710) | func (b *BaseApi) ListNetwork(c *gin.Context) {
method DeleteNetwork (line 728) | func (b *BaseApi) DeleteNetwork(c *gin.Context) {
method CreateNetwork (line 750) | func (b *BaseApi) CreateNetwork(c *gin.Context) {
method SearchVolume (line 772) | func (b *BaseApi) SearchVolume(c *gin.Context) {
method ListVolume (line 797) | func (b *BaseApi) ListVolume(c *gin.Context) {
method DeleteVolume (line 815) | func (b *BaseApi) DeleteVolume(c *gin.Context) {
method CreateVolume (line 837) | func (b *BaseApi) CreateVolume(c *gin.Context) {
method ComposeUpdate (line 859) | func (b *BaseApi) ComposeUpdate(c *gin.Context) {
method LoadComposeEnv (line 880) | func (b *BaseApi) LoadComposeEnv(c *gin.Context) {
method ContainerStreamLogs (line 903) | func (b *BaseApi) ContainerStreamLogs(c *gin.Context) {
FILE: agent/app/api/v2/cronjob.go
method CreateCronjob (line 23) | func (b *BaseApi) CreateCronjob(c *gin.Context) {
method LoadCronjobInfo (line 44) | func (b *BaseApi) LoadCronjobInfo(c *gin.Context) {
method ExportCronjob (line 66) | func (b *BaseApi) ExportCronjob(c *gin.Context) {
method ImportCronjob (line 88) | func (b *BaseApi) ImportCronjob(c *gin.Context) {
method LoadScriptOptions (line 107) | func (b *BaseApi) LoadScriptOptions(c *gin.Context) {
method LoadNextHandle (line 119) | func (b *BaseApi) LoadNextHandle(c *gin.Context) {
method SearchCronjob (line 141) | func (b *BaseApi) SearchCronjob(c *gin.Context) {
method SearchJobRecords (line 167) | func (b *BaseApi) SearchJobRecords(c *gin.Context) {
method LoadRecordLog (line 197) | func (b *BaseApi) LoadRecordLog(c *gin.Context) {
method CleanRecord (line 215) | func (b *BaseApi) CleanRecord(c *gin.Context) {
method StopCronJob (line 237) | func (b *BaseApi) StopCronJob(c *gin.Context) {
method DeleteCronjob (line 260) | func (b *BaseApi) DeleteCronjob(c *gin.Context) {
method UpdateCronjob (line 282) | func (b *BaseApi) UpdateCronjob(c *gin.Context) {
method UpdateCronjobGroup (line 304) | func (b *BaseApi) UpdateCronjobGroup(c *gin.Context) {
method UpdateCronjobStatus (line 326) | func (b *BaseApi) UpdateCronjobStatus(c *gin.Context) {
method HandleOnce (line 348) | func (b *BaseApi) HandleOnce(c *gin.Context) {
FILE: agent/app/api/v2/dashboard.go
method LoadDashboardOsInfo (line 18) | func (b *BaseApi) LoadDashboardOsInfo(c *gin.Context) {
method LoadAppLauncher (line 34) | func (b *BaseApi) LoadAppLauncher(c *gin.Context) {
method LoadAppLauncherOption (line 51) | func (b *BaseApi) LoadAppLauncherOption(c *gin.Context) {
method UpdateAppLauncher (line 73) | func (b *BaseApi) UpdateAppLauncher(c *gin.Context) {
method LoadQuickOption (line 92) | func (b *BaseApi) LoadQuickOption(c *gin.Context) {
method UpdateQuickJump (line 105) | func (b *BaseApi) UpdateQuickJump(c *gin.Context) {
method LoadDashboardBaseInfo (line 127) | func (b *BaseApi) LoadDashboardBaseInfo(c *gin.Context) {
method LoadCurrentInfoForNode (line 152) | func (b *BaseApi) LoadCurrentInfoForNode(c *gin.Context) {
method LoadDashboardCurrentInfo (line 166) | func (b *BaseApi) LoadDashboardCurrentInfo(c *gin.Context) {
method LoadDashboardTopCPU (line 188) | func (b *BaseApi) LoadDashboardTopCPU(c *gin.Context) {
method LoadDashboardTopMem (line 199) | func (b *BaseApi) LoadDashboardTopMem(c *gin.Context) {
method SystemRestart (line 212) | func (b *BaseApi) SystemRestart(c *gin.Context) {
FILE: agent/app/api/v2/database.go
method CreateDatabase (line 20) | func (b *BaseApi) CreateDatabase(c *gin.Context) {
method CheckDatabase (line 50) | func (b *BaseApi) CheckDatabase(c *gin.Context) {
method SearchDatabase (line 75) | func (b *BaseApi) SearchDatabase(c *gin.Context) {
method ListDatabase (line 99) | func (b *BaseApi) ListDatabase(c *gin.Context) {
method LoadDatabaseItems (line 120) | func (b *BaseApi) LoadDatabaseItems(c *gin.Context) {
method GetDatabase (line 141) | func (b *BaseApi) GetDatabase(c *gin.Context) {
method DeleteCheckDatabase (line 164) | func (b *BaseApi) DeleteCheckDatabase(c *gin.Context) {
method DeleteDatabase (line 187) | func (b *BaseApi) DeleteDatabase(c *gin.Context) {
method UpdateDatabase (line 209) | func (b *BaseApi) UpdateDatabase(c *gin.Context) {
FILE: agent/app/api/v2/database_common.go
method LoadDBBaseInfo (line 17) | func (b *BaseApi) LoadDBBaseInfo(c *gin.Context) {
method LoadDBFile (line 40) | func (b *BaseApi) LoadDBFile(c *gin.Context) {
method UpdateDBConfByFile (line 62) | func (b *BaseApi) UpdateDBConfByFile(c *gin.Context) {
FILE: agent/app/api/v2/database_mysql.go
method CreateMysql (line 21) | func (b *BaseApi) CreateMysql(c *gin.Context) {
method BindUser (line 52) | func (b *BaseApi) BindUser(c *gin.Context) {
method UpdateMysqlDescription (line 83) | func (b *BaseApi) UpdateMysqlDescription(c *gin.Context) {
method ChangeMysqlPassword (line 105) | func (b *BaseApi) ChangeMysqlPassword(c *gin.Context) {
method ChangeMysqlAccess (line 136) | func (b *BaseApi) ChangeMysqlAccess(c *gin.Context) {
method UpdateMysqlVariables (line 158) | func (b *BaseApi) UpdateMysqlVariables(c *gin.Context) {
method SearchMysql (line 179) | func (b *BaseApi) SearchMysql(c *gin.Context) {
method ListDBFormatCollationOptions (line 205) | func (b *BaseApi) ListDBFormatCollationOptions(c *gin.Context) {
method LoadDBFromRemote (line 221) | func (b *BaseApi) LoadDBFromRemote(c *gin.Context) {
method DeleteCheckMysql (line 243) | func (b *BaseApi) DeleteCheckMysql(c *gin.Context) {
method DeleteMysql (line 266) | func (b *BaseApi) DeleteMysql(c *gin.Context) {
method LoadRemoteAccess (line 290) | func (b *BaseApi) LoadRemoteAccess(c *gin.Context) {
method LoadStatus (line 312) | func (b *BaseApi) LoadStatus(c *gin.Context) {
method LoadVariables (line 335) | func (b *BaseApi) LoadVariables(c *gin.Context) {
FILE: agent/app/api/v2/database_postgresql.go
method CreatePostgresql (line 21) | func (b *BaseApi) CreatePostgresql(c *gin.Context) {
method BindPostgresqlUser (line 52) | func (b *BaseApi) BindPostgresqlUser(c *gin.Context) {
method UpdatePostgresqlDescription (line 74) | func (b *BaseApi) UpdatePostgresqlDescription(c *gin.Context) {
method ChangePostgresqlPrivileges (line 96) | func (b *BaseApi) ChangePostgresqlPrivileges(c *gin.Context) {
method ChangePostgresqlPassword (line 118) | func (b *BaseApi) ChangePostgresqlPassword(c *gin.Context) {
method SearchPostgresql (line 148) | func (b *BaseApi) SearchPostgresql(c *gin.Context) {
method LoadPostgresqlDBFromRemote (line 174) | func (b *BaseApi) LoadPostgresqlDBFromRemote(c *gin.Context) {
method DeleteCheckPostgresql (line 197) | func (b *BaseApi) DeleteCheckPostgresql(c *gin.Context) {
method DeletePostgresql (line 220) | func (b *BaseApi) DeletePostgresql(c *gin.Context) {
FILE: agent/app/api/v2/database_redis.go
method LoadRedisStatus (line 19) | func (b *BaseApi) LoadRedisStatus(c *gin.Context) {
method LoadRedisConf (line 41) | func (b *BaseApi) LoadRedisConf(c *gin.Context) {
method LoadPersistenceConf (line 63) | func (b *BaseApi) LoadPersistenceConf(c *gin.Context) {
method CheckHasCli (line 77) | func (b *BaseApi) CheckHasCli(c *gin.Context) {
method InstallCli (line 87) | func (b *BaseApi) InstallCli(c *gin.Context) {
method UpdateRedisConf (line 105) | func (b *BaseApi) UpdateRedisConf(c *gin.Context) {
method ChangeRedisPassword (line 127) | func (b *BaseApi) ChangeRedisPassword(c *gin.Context) {
method UpdateRedisPersistenceConf (line 158) | func (b *BaseApi) UpdateRedisPersistenceConf(c *gin.Context) {
FILE: agent/app/api/v2/device.go
method LoadDeviceBaseInfo (line 17) | func (b *BaseApi) LoadDeviceBaseInfo(c *gin.Context) {
method LoadTimeOption (line 34) | func (b *BaseApi) LoadTimeOption(c *gin.Context) {
method LoadDeviceConf (line 52) | func (b *BaseApi) LoadDeviceConf(c *gin.Context) {
method UpdateDeviceByFile (line 75) | func (b *BaseApi) UpdateDeviceByFile(c *gin.Context) {
method LoadUsers (line 94) | func (b *BaseApi) LoadUsers(c *gin.Context) {
method UpdateDeviceConf (line 112) | func (b *BaseApi) UpdateDeviceConf(c *gin.Context) {
method UpdateDeviceHost (line 133) | func (b *BaseApi) UpdateDeviceHost(c *gin.Context) {
method UpdateDevicePasswd (line 155) | func (b *BaseApi) UpdateDevicePasswd(c *gin.Context) {
method UpdateDeviceSwap (line 185) | func (b *BaseApi) UpdateDeviceSwap(c *gin.Context) {
method CheckDNS (line 206) | func (b *BaseApi) CheckDNS(c *gin.Context) {
method ScanSystem (line 228) | func (b *BaseApi) ScanSystem(c *gin.Context) {
method SystemClean (line 241) | func (b *BaseApi) SystemClean(c *gin.Context) {
FILE: agent/app/api/v2/disk.go
method GetCompleteDiskInfo (line 17) | func (b *BaseApi) GetCompleteDiskInfo(c *gin.Context) {
method PartitionDisk (line 36) | func (b *BaseApi) PartitionDisk(c *gin.Context) {
method MountDisk (line 61) | func (b *BaseApi) MountDisk(c *gin.Context) {
method UnmountDisk (line 86) | func (b *BaseApi) UnmountDisk(c *gin.Context) {
FILE: agent/app/api/v2/docker.go
method LoadDockerStatus (line 19) | func (b *BaseApi) LoadDockerStatus(c *gin.Context) {
method LoadDaemonJsonFile (line 31) | func (b *BaseApi) LoadDaemonJsonFile(c *gin.Context) {
method LoadDaemonJson (line 51) | func (b *BaseApi) LoadDaemonJson(c *gin.Context) {
method UpdateDaemonJson (line 69) | func (b *BaseApi) UpdateDaemonJson(c *gin.Context) {
method UpdateLogOption (line 92) | func (b *BaseApi) UpdateLogOption(c *gin.Context) {
method UpdateIpv6Option (line 115) | func (b *BaseApi) UpdateIpv6Option(c *gin.Context) {
method UpdateDaemonJsonByFile (line 138) | func (b *BaseApi) UpdateDaemonJsonByFile(c *gin.Context) {
method OperateDocker (line 161) | func (b *BaseApi) OperateDocker(c *gin.Context) {
FILE: agent/app/api/v2/entry.go
type ApiGroup (line 5) | type ApiGroup struct
type BaseApi (line 11) | type BaseApi struct
FILE: agent/app/api/v2/fail2ban.go
method LoadFail2BanBaseInfo (line 17) | func (b *BaseApi) LoadFail2BanBaseInfo(c *gin.Context) {
method SearchFail2Ban (line 35) | func (b *BaseApi) SearchFail2Ban(c *gin.Context) {
method OperateFail2Ban (line 59) | func (b *BaseApi) OperateFail2Ban(c *gin.Context) {
method OperateSSHD (line 81) | func (b *BaseApi) OperateSSHD(c *gin.Context) {
method UpdateFail2BanConf (line 104) | func (b *BaseApi) UpdateFail2BanConf(c *gin.Context) {
method LoadFail2BanConf (line 124) | func (b *BaseApi) LoadFail2BanConf(c *gin.Context) {
method UpdateFail2BanConfByFile (line 143) | func (b *BaseApi) UpdateFail2BanConfByFile(c *gin.Context) {
FILE: agent/app/api/v2/favorite.go
method SearchFavorite (line 18) | func (b *BaseApi) SearchFavorite(c *gin.Context) {
method CreateFavorite (line 43) | func (b *BaseApi) CreateFavorite(c *gin.Context) {
method DeleteFavorite (line 65) | func (b *BaseApi) DeleteFavorite(c *gin.Context) {
FILE: agent/app/api/v2/file.go
method ListFiles (line 38) | func (b *BaseApi) ListFiles(c *gin.Context) {
method SearchUploadWithPage (line 59) | func (b *BaseApi) SearchUploadWithPage(c *gin.Context) {
method GetFileTree (line 83) | func (b *BaseApi) GetFileTree(c *gin.Context) {
method CreateFile (line 105) | func (b *BaseApi) CreateFile(c *gin.Context) {
method DeleteFile (line 127) | func (b *BaseApi) DeleteFile(c *gin.Context) {
method BatchDeleteFile (line 149) | func (b *BaseApi) BatchDeleteFile(c *gin.Context) {
method ChangeFileMode (line 171) | func (b *BaseApi) ChangeFileMode(c *gin.Context) {
method ChangeFileOwner (line 193) | func (b *BaseApi) ChangeFileOwner(c *gin.Context) {
method CompressFile (line 214) | func (b *BaseApi) CompressFile(c *gin.Context) {
method DeCompressFile (line 236) | func (b *BaseApi) DeCompressFile(c *gin.Context) {
method GetContent (line 258) | func (b *BaseApi) GetContent(c *gin.Context) {
method PreviewContent (line 284) | func (b *BaseApi) PreviewContent(c *gin.Context) {
method SaveContent (line 307) | func (b *BaseApi) SaveContent(c *gin.Context) {
method UploadFiles (line 327) | func (b *BaseApi) UploadFiles(c *gin.Context) {
method CheckFile (line 435) | func (b *BaseApi) CheckFile(c *gin.Context) {
method BatchCheckFiles (line 464) | func (b *BaseApi) BatchCheckFiles(c *gin.Context) {
method ChangeFileName (line 482) | func (b *BaseApi) ChangeFileName(c *gin.Context) {
method WgetFile (line 503) | func (b *BaseApi) WgetFile(c *gin.Context) {
method MoveFile (line 527) | func (b *BaseApi) MoveFile(c *gin.Context) {
method Download (line 546) | func (b *BaseApi) Download(c *gin.Context) {
method DownloadChunkFiles (line 573) | func (b *BaseApi) DownloadChunkFiles(c *gin.Context) {
method Size (line 650) | func (b *BaseApi) Size(c *gin.Context) {
method DepthDirSize (line 672) | func (b *BaseApi) DepthDirSize(c *gin.Context) {
function mergeChunks (line 685) | func mergeChunks(fileName string, fileDir string, dstDir string, chunkCo...
method UploadChunkFiles (line 739) | func (b *BaseApi) UploadChunkFiles(c *gin.Context) {
method WgetProcess (line 832) | func (b *BaseApi) WgetProcess(c *gin.Context) {
method ProcessKeys (line 842) | func (b *BaseApi) ProcessKeys(c *gin.Context) {
method ReadFileByLine (line 866) | func (b *BaseApi) ReadFileByLine(c *gin.Context) {
method BatchChangeModeAndOwner (line 892) | func (b *BaseApi) BatchChangeModeAndOwner(c *gin.Context) {
method GetPathByType (line 903) | func (b *BaseApi) GetPathByType(c *gin.Context) {
method GetHostMount (line 920) | func (b *BaseApi) GetHostMount(c *gin.Context) {
method GetUsersAndGroups (line 932) | func (b *BaseApi) GetUsersAndGroups(c *gin.Context) {
method ConvertFile (line 949) | func (b *BaseApi) ConvertFile(c *gin.Context) {
method ConvertLog (line 966) | func (b *BaseApi) ConvertLog(c *gin.Context) {
method BatchGetFileRemarks (line 990) | func (b *BaseApi) BatchGetFileRemarks(c *gin.Context) {
method SetFileRemark (line 1007) | func (b *BaseApi) SetFileRemark(c *gin.Context) {
FILE: agent/app/api/v2/firewall.go
method LoadFirewallBaseInfo (line 17) | func (b *BaseApi) LoadFirewallBaseInfo(c *gin.Context) {
method SearchFirewallRule (line 40) | func (b *BaseApi) SearchFirewallRule(c *gin.Context) {
method OperateFirewall (line 67) | func (b *BaseApi) OperateFirewall(c *gin.Context) {
method OperatePortRule (line 90) | func (b *BaseApi) OperatePortRule(c *gin.Context) {
method OperateForwardRule (line 113) | func (b *BaseApi) OperateForwardRule(c *gin.Context) {
method OperateIPRule (line 135) | func (b *BaseApi) OperateIPRule(c *gin.Context) {
method BatchOperateRule (line 156) | func (b *BaseApi) BatchOperateRule(c *gin.Context) {
method UpdateFirewallDescription (line 177) | func (b *BaseApi) UpdateFirewallDescription(c *gin.Context) {
method UpdatePortRule (line 198) | func (b *BaseApi) UpdatePortRule(c *gin.Context) {
method UpdateAddrRule (line 219) | func (b *BaseApi) UpdateAddrRule(c *gin.Context) {
method SearchFilterRules (line 240) | func (b *BaseApi) SearchFilterRules(c *gin.Context) {
method OperateFilterRule (line 267) | func (b *BaseApi) OperateFilterRule(c *gin.Context) {
method BatchOperateFilterRule (line 288) | func (b *BaseApi) BatchOperateFilterRule(c *gin.Context) {
method OperateFilterChain (line 311) | func (b *BaseApi) OperateFilterChain(c *gin.Context) {
method LoadChainStatus (line 332) | func (b *BaseApi) LoadChainStatus(c *gin.Context) {
FILE: agent/app/api/v2/ftp.go
method LoadFtpBaseInfo (line 17) | func (b *BaseApi) LoadFtpBaseInfo(c *gin.Context) {
method LoadFtpLogInfo (line 35) | func (b *BaseApi) LoadFtpLogInfo(c *gin.Context) {
method OperateFtp (line 62) | func (b *BaseApi) OperateFtp(c *gin.Context) {
method SearchFtp (line 84) | func (b *BaseApi) SearchFtp(c *gin.Context) {
method CreateFtp (line 111) | func (b *BaseApi) CreateFtp(c *gin.Context) {
method DeleteFtp (line 141) | func (b *BaseApi) DeleteFtp(c *gin.Context) {
method SyncFtp (line 163) | func (b *BaseApi) SyncFtp(c *gin.Context) {
method UpdateFtp (line 180) | func (b *BaseApi) UpdateFtp(c *gin.Context) {
FILE: agent/app/api/v2/group.go
method CreateGroup (line 18) | func (b *BaseApi) CreateGroup(c *gin.Context) {
method DeleteGroup (line 40) | func (b *BaseApi) DeleteGroup(c *gin.Context) {
method UpdateGroup (line 62) | func (b *BaseApi) UpdateGroup(c *gin.Context) {
method ListGroup (line 83) | func (b *BaseApi) ListGroup(c *gin.Context) {
FILE: agent/app/api/v2/health.go
method CheckHealth (line 8) | func (b *BaseApi) CheckHealth(c *gin.Context) {
FILE: agent/app/api/v2/helper/helper.go
function ErrorWithDetail (line 23) | func ErrorWithDetail(ctx *gin.Context, code int, msgKey string, err erro...
function InternalServer (line 33) | func InternalServer(ctx *gin.Context, err error) {
function BadRequest (line 37) | func BadRequest(ctx *gin.Context, err error) {
function SuccessWithData (line 41) | func SuccessWithData(ctx *gin.Context, data interface{}) {
function SuccessWithDataGzipped (line 59) | func SuccessWithDataGzipped(ctx *gin.Context, data interface{}) {
function Success (line 89) | func Success(ctx *gin.Context) {
function SuccessWithMsg (line 98) | func SuccessWithMsg(ctx *gin.Context, msg string) {
function GetParamID (line 107) | func GetParamID(c *gin.Context) (uint, error) {
function GetIntParamByKey (line 116) | func GetIntParamByKey(c *gin.Context, key string) (uint, error) {
function GetStrParamByKey (line 125) | func GetStrParamByKey(c *gin.Context, key string) (string, error) {
function GetTxAndContext (line 133) | func GetTxAndContext() (tx *gorm.DB, ctx context.Context) {
function CheckBindAndValidate (line 139) | func CheckBindAndValidate(req interface{}, c *gin.Context) error {
function CheckBind (line 151) | func CheckBind(req interface{}, c *gin.Context) error {
function GetParamInt32 (line 159) | func GetParamInt32(paramName string, c *gin.Context) (int32, error) {
FILE: agent/app/api/v2/host.go
method CreateHost (line 10) | func (b *BaseApi) CreateHost(c *gin.Context) {
method TestByInfo (line 24) | func (b *BaseApi) TestByInfo(c *gin.Context) {
method TestByID (line 33) | func (b *BaseApi) TestByID(c *gin.Context) {
method HostTree (line 42) | func (b *BaseApi) HostTree(c *gin.Context) {
method SearchHost (line 56) | func (b *BaseApi) SearchHost(c *gin.Context) {
method DeleteHost (line 71) | func (b *BaseApi) DeleteHost(c *gin.Context) {
method UpdateHost (line 84) | func (b *BaseApi) UpdateHost(c *gin.Context) {
method UpdateHostGroup (line 143) | func (b *BaseApi) UpdateHostGroup(c *gin.Context) {
method GetHostByID (line 156) | func (b *BaseApi) GetHostByID(c *gin.Context) {
FILE: agent/app/api/v2/host_tool.go
method GetToolStatus (line 17) | func (b *BaseApi) GetToolStatus(c *gin.Context) {
method InitToolConfig (line 40) | func (b *BaseApi) InitToolConfig(c *gin.Context) {
method OperateTool (line 62) | func (b *BaseApi) OperateTool(c *gin.Context) {
method OperateToolConfig (line 84) | func (b *BaseApi) OperateToolConfig(c *gin.Context) {
method OperateProcess (line 107) | func (b *BaseApi) OperateProcess(c *gin.Context) {
method GetProcess (line 128) | func (b *BaseApi) GetProcess(c *gin.Context) {
method GetProcessFile (line 146) | func (b *BaseApi) GetProcessFile(c *gin.Context) {
FILE: agent/app/api/v2/image.go
method SearchImage (line 18) | func (b *BaseApi) SearchImage(c *gin.Context) {
method ListAllImage (line 43) | func (b *BaseApi) ListAllImage(c *gin.Context) {
method ListImage (line 59) | func (b *BaseApi) ListImage(c *gin.Context) {
method ImageBuild (line 77) | func (b *BaseApi) ImageBuild(c *gin.Context) {
method ImagePull (line 100) | func (b *BaseApi) ImagePull(c *gin.Context) {
method ImagePush (line 123) | func (b *BaseApi) ImagePush(c *gin.Context) {
method ImageRemove (line 146) | func (b *BaseApi) ImageRemove(c *gin.Context) {
method ImageSave (line 169) | func (b *BaseApi) ImageSave(c *gin.Context) {
method ImageTag (line 192) | func (b *BaseApi) ImageTag(c *gin.Context) {
method ImageLoad (line 215) | func (b *BaseApi) ImageLoad(c *gin.Context) {
FILE: agent/app/api/v2/image_repo.go
method SearchRepo (line 18) | func (b *BaseApi) SearchRepo(c *gin.Context) {
method ListRepo (line 43) | func (b *BaseApi) ListRepo(c *gin.Context) {
method CheckRepoStatus (line 62) | func (b *BaseApi) CheckRepoStatus(c *gin.Context) {
method CreateRepo (line 85) | func (b *BaseApi) CreateRepo(c *gin.Context) {
method DeleteRepo (line 108) | func (b *BaseApi) DeleteRepo(c *gin.Context) {
method UpdateRepo (line 131) | func (b *BaseApi) UpdateRepo(c *gin.Context) {
FILE: agent/app/api/v2/logs.go
method GetSystemFiles (line 14) | func (b *BaseApi) GetSystemFiles(c *gin.Context) {
FILE: agent/app/api/v2/mcp_server.go
method PageMcpServers (line 17) | func (b *BaseApi) PageMcpServers(c *gin.Context) {
method CreateMcpServer (line 34) | func (b *BaseApi) CreateMcpServer(c *gin.Context) {
method UpdateMcpServer (line 55) | func (b *BaseApi) UpdateMcpServer(c *gin.Context) {
method DeleteMcpServer (line 76) | func (b *BaseApi) DeleteMcpServer(c *gin.Context) {
method OperateMcpServer (line 97) | func (b *BaseApi) OperateMcpServer(c *gin.Context) {
method BindMcpDomain (line 118) | func (b *BaseApi) BindMcpDomain(c *gin.Context) {
method UpdateMcpBindDomain (line 139) | func (b *BaseApi) UpdateMcpBindDomain(c *gin.Context) {
method GetMcpBindDomain (line 159) | func (b *BaseApi) GetMcpBindDomain(c *gin.Context) {
FILE: agent/app/api/v2/monitor.go
method LoadMonitor (line 20) | func (b *BaseApi) LoadMonitor(c *gin.Context) {
method LoadGPUMonitor (line 41) | func (b *BaseApi) LoadGPUMonitor(c *gin.Context) {
method CleanMonitor (line 62) | func (b *BaseApi) CleanMonitor(c *gin.Context) {
method LoadMonitorSetting (line 77) | func (b *BaseApi) LoadMonitorSetting(c *gin.Context) {
method UpdateMonitorSetting (line 95) | func (b *BaseApi) UpdateMonitorSetting(c *gin.Context) {
method GetNetworkOptions (line 108) | func (b *BaseApi) GetNetworkOptions(c *gin.Context) {
method GetIOOptions (line 119) | func (b *BaseApi) GetIOOptions(c *gin.Context) {
method GetCPUOptions (line 130) | func (b *BaseApi) GetCPUOptions(c *gin.Context) {
FILE: agent/app/api/v2/nginx.go
method GetNginx (line 15) | func (b *BaseApi) GetNginx(c *gin.Context) {
method GetNginxConfigByScope (line 32) | func (b *BaseApi) GetNginxConfigByScope(c *gin.Context) {
method UpdateNginxConfigByScope (line 55) | func (b *BaseApi) UpdateNginxConfigByScope(c *gin.Context) {
method GetNginxStatus (line 73) | func (b *BaseApi) GetNginxStatus(c *gin.Context) {
method UpdateNginxFile (line 91) | func (b *BaseApi) UpdateNginxFile(c *gin.Context) {
method BuildNginx (line 113) | func (b *BaseApi) BuildNginx(c *gin.Context) {
method UpdateNginxModule (line 134) | func (b *BaseApi) UpdateNginxModule(c *gin.Context) {
method GetNginxModules (line 152) | func (b *BaseApi) GetNginxModules(c *gin.Context) {
method OperateDefaultHTTPs (line 169) | func (b *BaseApi) OperateDefaultHTTPs(c *gin.Context) {
method GetDefaultHTTPsStatus (line 188) | func (b *BaseApi) GetDefaultHTTPsStatus(c *gin.Context) {
FILE: agent/app/api/v2/php_extensions.go
method PagePHPExtensions (line 18) | func (b *BaseApi) PagePHPExtensions(c *gin.Context) {
method CreatePHPExtensions (line 55) | func (b *BaseApi) CreatePHPExtensions(c *gin.Context) {
method UpdatePHPExtensions (line 75) | func (b *BaseApi) UpdatePHPExtensions(c *gin.Context) {
method DeletePHPExtensions (line 95) | func (b *BaseApi) DeletePHPExtensions(c *gin.Context) {
FILE: agent/app/api/v2/process.go
method ProcessWs (line 10) | func (b *BaseApi) ProcessWs(c *gin.Context) {
method StopProcess (line 28) | func (b *BaseApi) StopProcess(c *gin.Context) {
method GetProcessInfoByPID (line 47) | func (b *BaseApi) GetProcessInfoByPID(c *gin.Context) {
method GetListeningProcess (line 67) | func (b *BaseApi) GetListeningProcess(c *gin.Context) {
FILE: agent/app/api/v2/recycle_bin.go
method SearchRecycleBinFile (line 18) | func (b *BaseApi) SearchRecycleBinFile(c *gin.Context) {
method ReduceRecycleBinFile (line 43) | func (b *BaseApi) ReduceRecycleBinFile(c *gin.Context) {
method ClearRecycleBinFile (line 63) | func (b *BaseApi) ClearRecycleBinFile(c *gin.Context) {
method GetRecycleStatus (line 78) | func (b *BaseApi) GetRecycleStatus(c *gin.Context) {
FILE: agent/app/api/v2/runtime.go
method SearchRuntimes (line 18) | func (b *BaseApi) SearchRuntimes(c *gin.Context) {
method CreateRuntime (line 43) | func (b *BaseApi) CreateRuntime(c *gin.Context) {
method DeleteRuntime (line 65) | func (b *BaseApi) DeleteRuntime(c *gin.Context) {
method DeleteRuntimeCheck (line 85) | func (b *BaseApi) DeleteRuntimeCheck(c *gin.Context) {
method UpdateRuntime (line 108) | func (b *BaseApi) UpdateRuntime(c *gin.Context) {
method GetRuntime (line 128) | func (b *BaseApi) GetRuntime(c *gin.Context) {
method GetNodePackageRunScript (line 150) | func (b *BaseApi) GetNodePackageRunScript(c *gin.Context) {
method OperateRuntime (line 172) | func (b *BaseApi) OperateRuntime(c *gin.Context) {
method GetNodeModules (line 193) | func (b *BaseApi) GetNodeModules(c *gin.Context) {
method OperateNodeModules (line 214) | func (b *BaseApi) OperateNodeModules(c *gin.Context) {
method SyncStatus (line 233) | func (b *BaseApi) SyncStatus(c *gin.Context) {
method GetRuntimeExtension (line 250) | func (b *BaseApi) GetRuntimeExtension(c *gin.Context) {
method InstallPHPExtension (line 272) | func (b *BaseApi) InstallPHPExtension(c *gin.Context) {
method UnInstallPHPExtension (line 293) | func (b *BaseApi) UnInstallPHPExtension(c *gin.Context) {
method GetPHPConfig (line 314) | func (b *BaseApi) GetPHPConfig(c *gin.Context) {
method UpdatePHPConfig (line 337) | func (b *BaseApi) UpdatePHPConfig(c *gin.Context) {
method UpdatePHPFile (line 358) | func (b *BaseApi) UpdatePHPFile(c *gin.Context) {
method GetPHPConfigFile (line 378) | func (b *BaseApi) GetPHPConfigFile(c *gin.Context) {
method UpdateFPMConfig (line 399) | func (b *BaseApi) UpdateFPMConfig(c *gin.Context) {
method GetFPMConfig (line 419) | func (b *BaseApi) GetFPMConfig(c *gin.Context) {
method GetSupervisorProcess (line 441) | func (b *BaseApi) GetSupervisorProcess(c *gin.Context) {
method OperateSupervisorProcess (line 463) | func (b *BaseApi) OperateSupervisorProcess(c *gin.Context) {
method OperateSupervisorProcessFile (line 484) | func (b *BaseApi) OperateSupervisorProcessFile(c *gin.Context) {
method UpdatePHPContainer (line 505) | func (b *BaseApi) UpdatePHPContainer(c *gin.Context) {
method GetPHPContainerConfig (line 525) | func (b *BaseApi) GetPHPContainerConfig(c *gin.Context) {
method UpdateRuntimeRemark (line 547) | func (b *BaseApi) UpdateRuntimeRemark(c *gin.Context) {
method GetFPMStatus (line 567) | func (b *BaseApi) GetFPMStatus(c *gin.Context) {
FILE: agent/app/api/v2/setting.go
method GetSettingInfo (line 21) | func (b *BaseApi) GetSettingInfo(c *gin.Context) {
method GetTerminalAISettingInfo (line 30) | func (b *BaseApi) GetTerminalAISettingInfo(c *gin.Context) {
method GetSystemAvailable (line 45) | func (b *BaseApi) GetSystemAvailable(c *gin.Context) {
method UpdateSetting (line 58) | func (b *BaseApi) UpdateSetting(c *gin.Context) {
method UpdateTerminalAISetting (line 71) | func (b *BaseApi) UpdateTerminalAISetting(c *gin.Context) {
method LoadBaseDir (line 90) | func (b *BaseApi) LoadBaseDir(c *gin.Context) {
method LoadLocalConn (line 100) | func (b *BaseApi) LoadLocalConn(c *gin.Context) {
method CheckLocalConn (line 104) | func (b *BaseApi) CheckLocalConn(c *gin.Context) {
method SetDefaultIsConn (line 121) | func (b *BaseApi) SetDefaultIsConn(c *gin.Context) {
method CheckLocalConnByInfo (line 140) | func (b *BaseApi) CheckLocalConnByInfo(c *gin.Context) {
method SaveLocalConn (line 155) | func (b *BaseApi) SaveLocalConn(c *gin.Context) {
function loadLocalConn (line 168) | func loadLocalConn() (*ssh.SSHClient, error) {
method GetSettingByKey (line 196) | func (b *BaseApi) GetSettingByKey(c *gin.Context) {
method SaveDescription (line 214) | func (b *BaseApi) SaveDescription(c *gin.Context) {
FILE: agent/app/api/v2/snapshot.go
method LoadSnapshotData (line 15) | func (b *BaseApi) LoadSnapshotData(c *gin.Context) {
method CreateSnapshot (line 33) | func (b *BaseApi) CreateSnapshot(c *gin.Context) {
method RecreateSnapshot (line 55) | func (b *BaseApi) RecreateSnapshot(c *gin.Context) {
method ImportSnapshot (line 77) | func (b *BaseApi) ImportSnapshot(c *gin.Context) {
method UpdateSnapDescription (line 99) | func (b *BaseApi) UpdateSnapDescription(c *gin.Context) {
method SearchSnapshot (line 120) | func (b *BaseApi) SearchSnapshot(c *gin.Context) {
method RecoverSnapshot (line 146) | func (b *BaseApi) RecoverSnapshot(c *gin.Context) {
method RollbackSnapshot (line 168) | func (b *BaseApi) RollbackSnapshot(c *gin.Context) {
method DeleteSnapshot (line 190) | func (b *BaseApi) DeleteSnapshot(c *gin.Context) {
FILE: agent/app/api/v2/ssh.go
method GetSSHInfo (line 17) | func (b *BaseApi) GetSSHInfo(c *gin.Context) {
method OperateSSH (line 35) | func (b *BaseApi) OperateSSH(c *gin.Context) {
method UpdateSSH (line 57) | func (b *BaseApi) UpdateSSH(c *gin.Context) {
method CreateRootCert (line 79) | func (b *BaseApi) CreateRootCert(c *gin.Context) {
method EditRootCert (line 103) | func (b *BaseApi) EditRootCert(c *gin.Context) {
method SyncRootCert (line 125) | func (b *BaseApi) SyncRootCert(c *gin.Context) {
method SearchRootCert (line 141) | func (b *BaseApi) SearchRootCert(c *gin.Context) {
method DeleteRootCert (line 167) | func (b *BaseApi) DeleteRootCert(c *gin.Context) {
method LoadSSHLogs (line 188) | func (b *BaseApi) LoadSSHLogs(c *gin.Context) {
method ExportSSHLogs (line 214) | func (b *BaseApi) ExportSSHLogs(c *gin.Context) {
method LoadSSHFile (line 235) | func (b *BaseApi) LoadSSHFile(c *gin.Context) {
method UpdateSSHByFile (line 258) | func (b *BaseApi) UpdateSSHByFile(c *gin.Context) {
function loadCertAfterDecrypt (line 271) | func loadCertAfterDecrypt(req *dto.RootCertOperate) error {
FILE: agent/app/api/v2/system.go
method CheckComponentExistence (line 17) | func (b *BaseApi) CheckComponentExistence(c *gin.Context) {
FILE: agent/app/api/v2/task.go
method PageTasks (line 17) | func (b *BaseApi) PageTasks(c *gin.Context) {
method CountExecutingTasks (line 39) | func (b *BaseApi) CountExecutingTasks(c *gin.Context) {
FILE: agent/app/api/v2/tensorrt_llm.go
method PageTensorRTLLMs (line 9) | func (b *BaseApi) PageTensorRTLLMs(c *gin.Context) {
method CreateTensorRTLLM (line 18) | func (b *BaseApi) CreateTensorRTLLM(c *gin.Context) {
method UpdateTensorRTLLM (line 31) | func (b *BaseApi) UpdateTensorRTLLM(c *gin.Context) {
method DeleteTensorRTLLM (line 44) | func (b *BaseApi) DeleteTensorRTLLM(c *gin.Context) {
method OperateTensorRTLLM (line 57) | func (b *BaseApi) OperateTensorRTLLM(c *gin.Context) {
FILE: agent/app/api/v2/terminal.go
method WsSSH (line 22) | func (b *BaseApi) WsSSH(c *gin.Context) {
method ContainerWsSSH (line 91) | func (b *BaseApi) ContainerWsSSH(c *gin.Context) {
function loadRedisInitCmd (line 154) | func loadRedisInitCmd(c *gin.Context, redisType string) ([]string, error) {
function loadOllamaInitCmd (line 182) | func loadOllamaInitCmd(c *gin.Context) ([]string, error) {
function loadContainerInitCmd (line 195) | func loadContainerInitCmd(c *gin.Context) ([]string, error) {
function loadDatabaseInitCmd (line 213) | func loadDatabaseInitCmd(c *gin.Context) ([]string, error) {
function wshandleError (line 236) | func wshandleError(ws *websocket.Conn, err error) bool {
FILE: agent/app/api/v2/website.go
method PageWebsite (line 18) | func (b *BaseApi) PageWebsite(c *gin.Context) {
method GetWebsites (line 40) | func (b *BaseApi) GetWebsites(c *gin.Context) {
method GetWebsiteOptions (line 55) | func (b *BaseApi) GetWebsiteOptions(c *gin.Context) {
method CreateWebsite (line 77) | func (b *BaseApi) CreateWebsite(c *gin.Context) {
method OpWebsite (line 99) | func (b *BaseApi) OpWebsite(c *gin.Context) {
method DeleteWebsite (line 121) | func (b *BaseApi) DeleteWebsite(c *gin.Context) {
method UpdateWebsite (line 143) | func (b *BaseApi) UpdateWebsite(c *gin.Context) {
method GetWebsite (line 163) | func (b *BaseApi) GetWebsite(c *gin.Context) {
method GetWebsiteNginx (line 185) | func (b *BaseApi) GetWebsiteNginx(c *gin.Context) {
method GetNginxConfig (line 209) | func (b *BaseApi) GetNginxConfig(c *gin.Context) {
method UpdateNginxConfig (line 231) | func (b *BaseApi) UpdateNginxConfig(c *gin.Context) {
method GetHTTPSConfig (line 251) | func (b *BaseApi) GetHTTPSConfig(c *gin.Context) {
method UpdateHTTPSConfig (line 274) | func (b *BaseApi) UpdateHTTPSConfig(c *gin.Context) {
method CreateWebsiteCheck (line 298) | func (b *BaseApi) CreateWebsiteCheck(c *gin.Context) {
method UpdateWebsiteNginxConfig (line 320) | func (b *BaseApi) UpdateWebsiteNginxConfig(c *gin.Context) {
method OpWebsiteLog (line 341) | func (b *BaseApi) OpWebsiteLog(c *gin.Context) {
method ChangeDefaultServer (line 363) | func (b *BaseApi) ChangeDefaultServer(c *gin.Context) {
method ChangePHPVersion (line 384) | func (b *BaseApi) ChangePHPVersion(c *gin.Context) {
method GetRewriteConfig (line 404) | func (b *BaseApi) GetRewriteConfig(c *gin.Context) {
method UpdateRewriteConfig (line 426) | func (b *BaseApi) UpdateRewriteConfig(c *gin.Context) {
method UpdateSiteDir (line 447) | func (b *BaseApi) UpdateSiteDir(c *gin.Context) {
method UpdateSiteDirPermission (line 468) | func (b *BaseApi) UpdateSiteDirPermission(c *gin.Context) {
method GetProxyConfig (line 488) | func (b *BaseApi) GetProxyConfig(c *gin.Context) {
method UpdateProxyConfig (line 510) | func (b *BaseApi) UpdateProxyConfig(c *gin.Context) {
method DeleteProxyConfig (line 532) | func (b *BaseApi) DeleteProxyConfig(c *gin.Context) {
method UpdateProxyConfigStatus (line 554) | func (b *BaseApi) UpdateProxyConfigStatus(c *gin.Context) {
method UpdateProxyConfigFile (line 576) | func (b *BaseApi) UpdateProxyConfigFile(c *gin.Context) {
method GetAuthConfig (line 596) | func (b *BaseApi) GetAuthConfig(c *gin.Context) {
method UpdateAuthConfig (line 617) | func (b *BaseApi) UpdateAuthConfig(c *gin.Context) {
method GetPathAuthConfig (line 637) | func (b *BaseApi) GetPathAuthConfig(c *gin.Context) {
method UpdatePathAuthConfig (line 658) | func (b *BaseApi) UpdatePathAuthConfig(c *gin.Context) {
method GetAntiLeech (line 678) | func (b *BaseApi) GetAntiLeech(c *gin.Context) {
method UpdateAntiLeech (line 699) | func (b *BaseApi) UpdateAntiLeech(c *gin.Context) {
method UpdateRedirectConfig (line 720) | func (b *BaseApi) UpdateRedirectConfig(c *gin.Context) {
method GetRedirectConfig (line 741) | func (b *BaseApi) GetRedirectConfig(c *gin.Context) {
method UpdateRedirectConfigFile (line 763) | func (b *BaseApi) UpdateRedirectConfigFile(c *gin.Context) {
method GetDirConfig (line 783) | func (b *BaseApi) GetDirConfig(c *gin.Context) {
method GetDefaultHtml (line 803) | func (b *BaseApi) GetDefaultHtml(c *gin.Context) {
method UpdateDefaultHtml (line 826) | func (b *BaseApi) UpdateDefaultHtml(c *gin.Context) {
method GetLoadBalances (line 846) | func (b *BaseApi) GetLoadBalances(c *gin.Context) {
method CreateLoadBalance (line 868) | func (b *BaseApi) CreateLoadBalance(c *gin.Context) {
method DeleteLoadBalance (line 888) | func (b *BaseApi) DeleteLoadBalance(c *gin.Context) {
method UpdateLoadBalance (line 908) | func (b *BaseApi) UpdateLoadBalance(c *gin.Context) {
method UpdateLoadBalanceFile (line 928) | func (b *BaseApi) UpdateLoadBalanceFile(c *gin.Context) {
method ChangeWebsiteGroup (line 940) | func (b *BaseApi) ChangeWebsiteGroup(c *gin.Context) {
method UpdateProxyCache (line 960) | func (b *BaseApi) UpdateProxyCache(c *gin.Context) {
method GetProxyCache (line 979) | func (b *BaseApi) GetProxyCache(c *gin.Context) {
method SetRealIPConfig (line 1002) | func (b *BaseApi) SetRealIPConfig(c *gin.Context) {
method GetRealIPConfig (line 1022) | func (b *BaseApi) GetRealIPConfig(c *gin.Context) {
method GetWebsiteResource (line 1044) | func (b *BaseApi) GetWebsiteResource(c *gin.Context) {
method GetWebsiteDatabase (line 1065) | func (b *BaseApi) GetWebsiteDatabase(c *gin.Context) {
method ChangeWebsiteDatabase (line 1082) | func (b *BaseApi) ChangeWebsiteDatabase(c *gin.Context) {
method OperateCustomRewrite (line 1102) | func (b *BaseApi) OperateCustomRewrite(c *gin.Context) {
method ListCustomRewrite (line 1121) | func (b *BaseApi) ListCustomRewrite(c *gin.Context) {
method ClearProxyCache (line 1137) | func (b *BaseApi) ClearProxyCache(c *gin.Context) {
method OperateCrossSiteAccess (line 1157) | func (b *BaseApi) OperateCrossSiteAccess(c *gin.Context) {
method ExecComposer (line 1177) | func (b *BaseApi) ExecComposer(c *gin.Context) {
method BatchOpWebsites (line 1197) | func (b *BaseApi) BatchOpWebsites(c *gin.Context) {
method BatchSetWebsiteGroup (line 1217) | func (b *BaseApi) BatchSetWebsiteGroup(c *gin.Context) {
method GetCORSConfig (line 1237) | func (b *BaseApi) GetCORSConfig(c *gin.Context) {
method UpdateCORSConfig (line 1259) | func (b *BaseApi) UpdateCORSConfig(c *gin.Context) {
method UpdateStreamConfig (line 1279) | func (b *BaseApi) UpdateStreamConfig(c *gin.Context) {
method BatchSetHttps (line 1299) | func (b *BaseApi) BatchSetHttps(c *gin.Context) {
FILE: agent/app/api/v2/website_acme_account.go
method PageWebsiteAcmeAccount (line 18) | func (b *BaseApi) PageWebsiteAcmeAccount(c *gin.Context) {
method CreateWebsiteAcmeAccount (line 43) | func (b *BaseApi) CreateWebsiteAcmeAccount(c *gin.Context) {
method DeleteWebsiteAcmeAccount (line 65) | func (b *BaseApi) DeleteWebsiteAcmeAccount(c *gin.Context) {
method UpdateWebsiteAcmeAccount (line 86) | func (b *BaseApi) UpdateWebsiteAcmeAccount(c *gin.Context) {
FILE: agent/app/api/v2/website_ca.go
method PageWebsiteCA (line 22) | func (b *BaseApi) PageWebsiteCA(c *gin.Context) {
method CreateWebsiteCA (line 47) | func (b *BaseApi) CreateWebsiteCA(c *gin.Context) {
method GetWebsiteCA (line 68) | func (b *BaseApi) GetWebsiteCA(c *gin.Context) {
method DeleteWebsiteCA (line 90) | func (b *BaseApi) DeleteWebsiteCA(c *gin.Context) {
method ObtainWebsiteCA (line 111) | func (b *BaseApi) ObtainWebsiteCA(c *gin.Context) {
method RenewWebsiteCA (line 133) | func (b *BaseApi) RenewWebsiteCA(c *gin.Context) {
method DownloadCAFile (line 159) | func (b *BaseApi) DownloadCAFile(c *gin.Context) {
FILE: agent/app/api/v2/website_dns_account.go
method PageWebsiteDnsAccount (line 18) | func (b *BaseApi) PageWebsiteDnsAccount(c *gin.Context) {
method CreateWebsiteDnsAccount (line 43) | func (b *BaseApi) CreateWebsiteDnsAccount(c *gin.Context) {
method UpdateWebsiteDnsAccount (line 64) | func (b *BaseApi) UpdateWebsiteDnsAccount(c *gin.Context) {
method DeleteWebsiteDnsAccount (line 85) | func (b *BaseApi) DeleteWebsiteDnsAccount(c *gin.Context) {
FILE: agent/app/api/v2/website_domain.go
method DeleteWebDomain (line 18) | func (b *BaseApi) DeleteWebDomain(c *gin.Context) {
method CreateWebDomain (line 39) | func (b *BaseApi) CreateWebDomain(c *gin.Context) {
method GetWebDomains (line 60) | func (b *BaseApi) GetWebDomains(c *gin.Context) {
method UpdateWebDomain (line 83) | func (b *BaseApi) UpdateWebDomain(c *gin.Context) {
FILE: agent/app/api/v2/website_ssl.go
method PageWebsiteSSL (line 26) | func (b *BaseApi) PageWebsiteSSL(c *gin.Context) {
method ListWebsiteSSL (line 50) | func (b *BaseApi) ListWebsiteSSL(c *gin.Context) {
method CreateWebsiteSSL (line 72) | func (b *BaseApi) CreateWebsiteSSL(c *gin.Context) {
method ApplyWebsiteSSL (line 94) | func (b *BaseApi) ApplyWebsiteSSL(c *gin.Context) {
method GetDNSResolve (line 114) | func (b *BaseApi) GetDNSResolve(c *gin.Context) {
method DeleteWebsiteSSL (line 136) | func (b *BaseApi) DeleteWebsiteSSL(c *gin.Context) {
method GetWebsiteSSLByWebsiteId (line 156) | func (b *BaseApi) GetWebsiteSSLByWebsiteId(c *gin.Context) {
method GetWebsiteSSLById (line 178) | func (b *BaseApi) GetWebsiteSSLById(c *gin.Context) {
method UpdateWebsiteSSL (line 201) | func (b *BaseApi) UpdateWebsiteSSL(c *gin.Context) {
method UploadWebsiteSSL (line 222) | func (b *BaseApi) UploadWebsiteSSL(c *gin.Context) {
method UploadSSLFile (line 247) | func (b *BaseApi) UploadSSLFile(c *gin.Context) {
function readUploadedFile (line 296) | func readUploadedFile(fileHeader *multipart.FileHeader) ([]byte, error) {
method DownloadWebsiteSSL (line 315) | func (b *BaseApi) DownloadWebsiteSSL(c *gin.Context) {
method ImportMasterSSL (line 336) | func (b *BaseApi) ImportMasterSSL(c *gin.Context) {
FILE: agent/app/dto/agents.go
type AgentCreateReq (line 5) | type AgentCreateReq struct
type AgentItem (line 29) | type AgentItem struct
type AgentDeleteReq (line 56) | type AgentDeleteReq struct
type AgentTokenResetReq (line 62) | type AgentTokenResetReq struct
type AgentModelConfigUpdateReq (line 66) | type AgentModelConfigUpdateReq struct
type AgentAccountModel (line 72) | type AgentAccountModel struct
type AgentAccountModelReq (line 82) | type AgentAccountModelReq struct
type AgentAccountModelCreateReq (line 86) | type AgentAccountModelCreateReq struct
type AgentAccountModelUpdateReq (line 91) | type AgentAccountModelUpdateReq struct
type AgentAccountModelDeleteReq (line 96) | type AgentAccountModelDeleteReq struct
type AgentAccountCreateReq (line 101) | type AgentAccountCreateReq struct
type AgentAccountUpdateReq (line 112) | type AgentAccountUpdateReq struct
type AgentAccountVerifyReq (line 123) | type AgentAccountVerifyReq struct
type AgentAccountDeleteReq (line 129) | type AgentAccountDeleteReq struct
type AgentAccountSearch (line 133) | type AgentAccountSearch struct
type AgentAccountInfo (line 139) | type AgentAccountInfo struct
type ProviderModelInfo (line 154) | type ProviderModelInfo struct
type ProviderInfo (line 163) | type ProviderInfo struct
type AgentFeishuConfigReq (line 171) | type AgentFeishuConfigReq struct
type AgentFeishuConfigUpdateReq (line 175) | type AgentFeishuConfigUpdateReq struct
type AgentFeishuPairingApproveReq (line 184) | type AgentFeishuPairingApproveReq struct
type AgentFeishuConfig (line 189) | type AgentFeishuConfig struct
type AgentTelegramConfigReq (line 197) | type AgentTelegramConfigReq struct
type AgentTelegramConfigUpdateReq (line 201) | type AgentTelegramConfigUpdateReq struct
type AgentTelegramConfig (line 209) | type AgentTelegramConfig struct
type AgentChannelPairingApproveReq (line 216) | type AgentChannelPairingApproveReq struct
type AgentWecomConfigReq (line 222) | type AgentWecomConfigReq struct
type AgentWecomConfigUpdateReq (line 226) | type AgentWecomConfigUpdateReq struct
type AgentWecomConfig (line 234) | type AgentWecomConfig struct
type AgentDingTalkConfigReq (line 242) | type AgentDingTalkConfigReq struct
type AgentDingTalkConfigUpdateReq (line 246) | type AgentDingTalkConfigUpdateReq struct
type AgentDingTalkConfig (line 257) | type AgentDingTalkConfig struct
type AgentQQBotConfigReq (line 268) | type AgentQQBotConfigReq struct
type AgentQQBotConfigUpdateReq (line 272) | type AgentQQBotConfigUpdateReq struct
type AgentQQBotConfig (line 279) | type AgentQQBotConfig struct
type AgentPluginInstallReq (line 286) | type AgentPluginInstallReq struct
type AgentPluginCheckReq (line 292) | type AgentPluginCheckReq struct
type AgentPluginStatus (line 297) | type AgentPluginStatus struct
type AgentDiscordConfigReq (line 301) | type AgentDiscordConfigReq struct
type AgentDiscordConfigUpdateReq (line 305) | type AgentDiscordConfigUpdateReq struct
type AgentDiscordConfig (line 314) | type AgentDiscordConfig struct
type AgentSecurityConfigReq (line 322) | type AgentSecurityConfigReq struct
type AgentSecurityConfigUpdateReq (line 326) | type AgentSecurityConfigUpdateReq struct
type AgentSecurityConfig (line 331) | type AgentSecurityConfig struct
type AgentOtherConfigReq (line 335) | type AgentOtherConfigReq struct
type AgentOtherConfigUpdateReq (line 339) | type AgentOtherConfigUpdateReq struct
type AgentOtherConfig (line 345) | type AgentOtherConfig struct
FILE: agent/app/dto/ai.go
type OllamaModelInfo (line 5) | type OllamaModelInfo struct
type OllamaModelDropList (line 17) | type OllamaModelDropList struct
type OllamaModelName (line 22) | type OllamaModelName struct
type OllamaBindDomain (line 27) | type OllamaBindDomain struct
type OllamaBindDomainReq (line 35) | type OllamaBindDomainReq struct
type OllamaBindDomainRes (line 39) | type OllamaBindDomainRes struct
FILE: agent/app/dto/alert.go
type CreateOrUpdateAlert (line 9) | type CreateOrUpdateAlert struct
type AlertBase (line 17) | type AlertBase struct
type PushAlert (line 22) | type PushAlert struct
type AlertSearch (line 29) | type AlertSearch struct
type AlertDTO (line 38) | type AlertDTO struct
type AlertCreate (line 53) | type AlertCreate struct
type AlertUpdate (line 65) | type AlertUpdate struct
type DeleteRequest (line 78) | type DeleteRequest struct
type AlertUpdateStatus (line 82) | type AlertUpdateStatus struct
type DiskDTO (line 87) | type DiskDTO struct
type AlertLogSearch (line 102) | type AlertLogSearch struct
type AlertLogDTO (line 108) | type AlertLogDTO struct
type AlertLogCreate (line 122) | type AlertLogCreate struct
type AlertLog (line 135) | type AlertLog struct
type AlertDetail (line 139) | type AlertDetail struct
type AlertRule (line 152) | type AlertRule struct
type Param (line 166) | type Param struct
type ClamDTO (line 172) | type ClamDTO struct
type CronJobDTO (line 181) | type CronJobDTO struct
type CronJobReq (line 190) | type CronJobReq struct
type UpgradeInfo (line 196) | type UpgradeInfo struct
type AlertDiskInfo (line 203) | type AlertDiskInfo struct
type SyncResult (line 209) | type SyncResult struct
type QueryRequest (line 220) | type QueryRequest struct
type AlertResponse (line 225) | type AlertResponse struct
type PushResult (line 231) | type PushResult struct
type UpdateOfflineAlertLog (line 236) | type UpdateOfflineAlertLog struct
type SyncOfflineAlertLogDTO (line 244) | type SyncOfflineAlertLogDTO struct
type OfflineAlertResponse (line 251) | type OfflineAlertResponse struct
type OfflineAlertLogDTO (line 261) | type OfflineAlertLogDTO struct
type OfflineQueryRequest (line 277) | type OfflineQueryRequest struct
type AlertConfigUpdate (line 283) | type AlertConfigUpdate struct
type AlertConfigTest (line 291) | type AlertConfigTest struct
type AlertSendTimeRange (line 302) | type AlertSendTimeRange struct
type AlertCommonConfig (line 313) | type AlertCommonConfig struct
type AlertSmsConfig (line 318) | type AlertSmsConfig struct
type AlertEmailConfig (line 323) | type AlertEmailConfig struct
type AgentInfo (line 334) | type AgentInfo struct
type AlertWebhookConfig (line 339) | type AlertWebhookConfig struct
FILE: agent/app/dto/app.go
type AppDatabase (line 9) | type AppDatabase struct
type AuthParam (line 19) | type AuthParam struct
type RedisAuthParam (line 24) | type RedisAuthParam struct
type MinioAuthParam (line 28) | type MinioAuthParam struct
type ContainerExec (line 33) | type ContainerExec struct
type AppOssConfig (line 39) | type AppOssConfig struct
type AppVersion (line 44) | type AppVersion struct
type AppList (line 50) | type AppList struct
type AppDefine (line 59) | type AppDefine struct
type LocalAppAppDefine (line 69) | type LocalAppAppDefine struct
type LocalAppParam (line 73) | type LocalAppParam struct
type LocalAppInstallDefine (line 77) | type LocalAppInstallDefine struct
type ExtraProperties (line 81) | type ExtraProperties struct
type AppProperty (line 86) | type AppProperty struct
type AppConfigVersion (line 109) | type AppConfigVersion struct
type Tag (line 117) | type Tag struct
type Locale (line 124) | type Locale struct
type AppForm (line 137) | type AppForm struct
type AppFormFields (line 142) | type AppFormFields struct
type AppFormValue (line 159) | type AppFormValue struct
type AppResource (line 164) | type AppResource struct
type AppInstallInfo (line 174) | type AppInstallInfo struct
type DelAppLink (line 180) | type DelAppLink struct
type PHPForm (line 187) | type PHPForm struct
FILE: agent/app/dto/backup.go
type BackupOperate (line 7) | type BackupOperate struct
type BackupInfo (line 21) | type BackupInfo struct
type BackupCheckRes (line 36) | type BackupCheckRes struct
type ForBuckets (line 42) | type ForBuckets struct
type SyncFromMaster (line 49) | type SyncFromMaster struct
type BackupOption (line 55) | type BackupOption struct
type UploadForRecover (line 62) | type UploadForRecover struct
type CommonBackup (line 67) | type CommonBackup struct
type CommonRecover (line 79) | type CommonRecover struct
type RecordSearch (line 91) | type RecordSearch struct
type RecordSearchByCronjob (line 98) | type RecordSearchByCronjob struct
type BackupRecords (line 103) | type BackupRecords struct
type DownloadRecord (line 117) | type DownloadRecord struct
type SearchForSize (line 123) | type SearchForSize struct
type RecordFileSize (line 133) | type RecordFileSize struct
FILE: agent/app/dto/clam.go
type SearchClamWithPage (line 7) | type SearchClamWithPage struct
type ClamBaseInfo (line 14) | type ClamBaseInfo struct
type ClamInfo (line 24) | type ClamInfo struct
type ClamLogSearch (line 42) | type ClamLogSearch struct
type ClamLogReq (line 51) | type ClamLogReq struct
type ClamFileReq (line 57) | type ClamFileReq struct
type ClamRecord (line 62) | type ClamRecord struct
type ClamCreate (line 74) | type ClamCreate struct
type ClamUpdate (line 88) | type ClamUpdate struct
type ClamUpdateStatus (line 103) | type ClamUpdateStatus struct
type ClamDelete (line 108) | type ClamDelete struct
FILE: agent/app/dto/command.go
type SearchCommandWithPage (line 3) | type SearchCommandWithPage struct
type CommandOperate (line 12) | type CommandOperate struct
type CommandInfo (line 20) | type CommandInfo struct
type CommandTree (line 28) | type CommandTree struct
type RedisCommand (line 34) | type RedisCommand struct
FILE: agent/app/dto/common_req.go
type SearchWithPage (line 3) | type SearchWithPage struct
type SearchPageWithType (line 8) | type SearchPageWithType struct
type SearchPageWithGroup (line 14) | type SearchPageWithGroup struct
type PageInfo (line 20) | type PageInfo struct
type UpdateDescription (line 25) | type UpdateDescription struct
type OperationWithName (line 30) | type OperationWithName struct
type OperateByID (line 34) | type OperateByID struct
type OperateByIDs (line 37) | type OperateByIDs struct
type Operate (line 41) | type Operate struct
type SearchByFilter (line 45) | type SearchByFilter struct
type BatchDeleteReq (line 49) | type BatchDeleteReq struct
type FilePath (line 53) | type FilePath struct
type DeleteByName (line 57) | type DeleteByName struct
type UpdateByFile (line 61) | type UpdateByFile struct
type UpdateByNameAndFile (line 65) | type UpdateByNameAndFile struct
type OperationWithNameAndType (line 70) | type OperationWithNameAndType struct
type UpdateGroup (line 75) | type UpdateGroup struct
type OperateWithTask (line 80) | type OperateWithTask struct
type ForceDelete (line 84) | type ForceDelete struct
type ChangeGroup (line 89) | type ChangeGroup struct
FILE: agent/app/dto/common_res.go
type PageResult (line 3) | type PageResult struct
type Response (line 8) | type Response struct
type Options (line 14) | type Options struct
FILE: agent/app/dto/compose_template.go
type ComposeTemplateCreate (line 5) | type ComposeTemplateCreate struct
type ComposeTemplateBatch (line 11) | type ComposeTemplateBatch struct
type ComposeTemplateUpdate (line 15) | type ComposeTemplateUpdate struct
type ComposeTemplateInfo (line 21) | type ComposeTemplateInfo struct
FILE: agent/app/dto/container.go
type PageContainer (line 7) | type PageContainer struct
type InspectReq (line 17) | type InspectReq struct
type ContainerInfo (line 23) | type ContainerInfo struct
type ContainerOptions (line 46) | type ContainerOptions struct
type ContainerFileReq (line 51) | type ContainerFileReq struct
type ContainerFileBatchDeleteReq (line 56) | type ContainerFileBatchDeleteReq struct
type ContainerFileInfo (line 61) | type ContainerFileInfo struct
type ContainerFileContent (line 72) | type ContainerFileContent struct
type ContainerStatus (line 79) | type ContainerStatus struct
type ResourceLimit (line 96) | type ResourceLimit struct
type ContainerOperate (line 101) | type ContainerOperate struct
type ExtraHost (line 132) | type ExtraHost struct
type ContainerNetwork (line 136) | type ContainerNetwork struct
type ContainerCreateByCommand (line 143) | type ContainerCreateByCommand struct
type ContainerUpgrade (line 148) | type ContainerUpgrade struct
type ContainerItemStats (line 155) | type ContainerItemStats struct
type ContainerListStats (line 168) | type ContainerListStats struct
type ContainerStats (line 182) | type ContainerStats struct
type VolumeHelper (line 194) | type VolumeHelper struct
type PortHelper (line 201) | type PortHelper struct
type ContainerOperation (line 208) | type ContainerOperation struct
type ContainerRename (line 214) | type ContainerRename struct
type ContainerCommit (line 219) | type ContainerCommit struct
type ContainerPrune (line 230) | type ContainerPrune struct
type Network (line 236) | type Network struct
type NetworkCreate (line 247) | type NetworkCreate struct
type Volume (line 265) | type Volume struct
type VolumeCreate (line 273) | type VolumeCreate struct
type VolumeOption (line 279) | type VolumeOption struct
type BatchDelete (line 283) | type BatchDelete struct
type ComposeInfo (line 289) | type ComposeInfo struct
type ComposeContainer (line 301) | type ComposeContainer struct
type ComposeCreate (line 308) | type ComposeCreate struct
type ComposeOperation (line 318) | type ComposeOperation struct
type ComposeUpdate (line 325) | type ComposeUpdate struct
type ComposeLogClean (line 334) | type ComposeLogClean struct
type ContainerLog (line 340) | type ContainerLog struct
type StreamLog (line 348) | type StreamLog struct
FILE: agent/app/dto/cronjob.go
type PageCronjob (line 7) | type PageCronjob struct
type CronjobSpec (line 15) | type CronjobSpec struct
type CronjobOperate (line 19) | type CronjobOperate struct
type CleanLogConfig (line 61) | type CleanLogConfig struct
type SnapshotRule (line 65) | type SnapshotRule struct
type CronjobUpdateStatus (line 70) | type CronjobUpdateStatus struct
type CronjobClean (line 75) | type CronjobClean struct
type CronjobBatchDelete (line 82) | type CronjobBatchDelete struct
type CronjobInfo (line 88) | type CronjobInfo struct
type CronjobImport (line 132) | type CronjobImport struct
type CronjobTrans (line 135) | type CronjobTrans struct
type TransHelper (line 176) | type TransHelper struct
type SnapshotTransHelper (line 180) | type SnapshotTransHelper struct
type ScriptOptions (line 185) | type ScriptOptions struct
type SearchRecord (line 190) | type SearchRecord struct
type Record (line 198) | type Record struct
FILE: agent/app/dto/dashboard.go
type DashboardBase (line 5) | type DashboardBase struct
type ChangeQuicks (line 33) | type ChangeQuicks struct
type QuickJump (line 37) | type QuickJump struct
type OsInfo (line 48) | type OsInfo struct
type NodeCurrent (line 59) | type NodeCurrent struct
type DashboardCurrent (line 81) | type DashboardCurrent struct
type AppLauncherSync (line 131) | type AppLauncherSync struct
type DiskInfo (line 135) | type DiskInfo struct
type GPUInfo (line 150) | type GPUInfo struct
type AppLauncher (line 165) | type AppLauncher struct
type InstallDetail (line 179) | type InstallDetail struct
type LauncherOption (line 191) | type LauncherOption struct
type XPUInfo (line 196) | type XPUInfo struct
FILE: agent/app/dto/database.go
type DBConfUpdateByFile (line 6) | type DBConfUpdateByFile struct
type ChangeDBInfo (line 11) | type ChangeDBInfo struct
type DBBaseInfo (line 19) | type DBBaseInfo struct
type MysqlDBSearch (line 26) | type MysqlDBSearch struct
type MysqlDBInfo (line 34) | type MysqlDBInfo struct
type MysqlOption (line 49) | type MysqlOption struct
type MysqlDBCreate (line 57) | type MysqlDBCreate struct
type MysqlFormatCollationOption (line 69) | type MysqlFormatCollationOption struct
type BindUser (line 74) | type BindUser struct
type MysqlLoadDB (line 82) | type MysqlLoadDB struct
type MysqlDBDeleteCheck (line 88) | type MysqlDBDeleteCheck struct
type MysqlDBDelete (line 94) | type MysqlDBDelete struct
type MysqlStatus (line 102) | type MysqlStatus struct
type MysqlVariables (line 140) | type MysqlVariables struct
type MysqlVariablesUpdate (line 162) | type MysqlVariablesUpdate struct
type MysqlVariablesUpdateHelper (line 168) | type MysqlVariablesUpdateHelper struct
type ChangeRedisPass (line 174) | type ChangeRedisPass struct
type RedisConfUpdate (line 179) | type RedisConfUpdate struct
type RedisConfPersistenceUpdate (line 186) | type RedisConfPersistenceUpdate struct
type RedisConf (line 195) | type RedisConf struct
type RedisPersistence (line 206) | type RedisPersistence struct
type RedisStatus (line 213) | type RedisStatus struct
type DatabaseFileRecords (line 230) | type DatabaseFileRecords struct
type RedisBackupRecover (line 237) | type RedisBackupRecover struct
type DatabaseSearch (line 244) | type DatabaseSearch struct
type DatabaseInfo (line 252) | type DatabaseInfo struct
type DatabaseOption (line 275) | type DatabaseOption struct
type DatabaseItem (line 284) | type DatabaseItem struct
type DatabaseCreate (line 291) | type DatabaseCreate struct
type DatabaseUpdate (line 312) | type DatabaseUpdate struct
type DatabaseDelete (line 332) | type DatabaseDelete struct
type LoadRedisStatus (line 338) | type LoadRedisStatus struct
type DBResource (line 343) | type DBResource struct
FILE: agent/app/dto/database_postgresql.go
type PostgresqlDBSearch (line 5) | type PostgresqlDBSearch struct
type PostgresqlDBInfo (line 13) | type PostgresqlDBInfo struct
type PostgresqlOption (line 27) | type PostgresqlOption struct
type PostgresqlDBCreate (line 35) | type PostgresqlDBCreate struct
type PostgresqlBindUser (line 46) | type PostgresqlBindUser struct
type PostgresqlPrivileges (line 54) | type PostgresqlPrivileges struct
type PostgresqlLoadDB (line 61) | type PostgresqlLoadDB struct
type PostgresqlDBDeleteCheck (line 67) | type PostgresqlDBDeleteCheck struct
type PostgresqlDBDelete (line 73) | type PostgresqlDBDelete struct
FILE: agent/app/dto/device.go
type DeviceBaseInfo (line 3) | type DeviceBaseInfo struct
type HostHelper (line 20) | type HostHelper struct
type SwapHelper (line 25) | type SwapHelper struct
type TimeZoneOptions (line 34) | type TimeZoneOptions struct
type ChangePasswd (line 39) | type ChangePasswd struct
FILE: agent/app/dto/disk.go
type LsblkDevice (line 3) | type LsblkDevice struct
type LsblkOutput (line 16) | type LsblkOutput struct
type DiskFormatRequest (line 20) | type DiskFormatRequest struct
FILE: agent/app/dto/docker.go
type DaemonJsonUpdateByFile (line 3) | type DaemonJsonUpdateByFile struct
type DockerStatus (line 7) | type DockerStatus struct
type DaemonJsonConf (line 12) | type DaemonJsonConf struct
type LogOption (line 30) | type LogOption struct
type Ipv6Option (line 35) | type Ipv6Option struct
type DockerOperation (line 41) | type DockerOperation struct
FILE: agent/app/dto/fail2ban.go
type Fail2BanBaseInfo (line 3) | type Fail2BanBaseInfo struct
type Fail2BanSearch (line 17) | type Fail2BanSearch struct
type Fail2BanUpdate (line 21) | type Fail2BanUpdate struct
type Fail2BanSet (line 26) | type Fail2BanSet struct
FILE: agent/app/dto/file.go
type LogFileRes (line 3) | type LogFileRes struct
FILE: agent/app/dto/firewall.go
type FirewallBaseInfo (line 3) | type FirewallBaseInfo struct
type RuleSearch (line 13) | type RuleSearch struct
type FirewallOperation (line 21) | type FirewallOperation struct
type PortRuleOperate (line 26) | type PortRuleOperate struct
type ForwardRuleOperate (line 38) | type ForwardRuleOperate struct
type UpdateFirewallDescription (line 51) | type UpdateFirewallDescription struct
type AddrRuleOperate (line 64) | type AddrRuleOperate struct
type PortRuleUpdate (line 73) | type PortRuleUpdate struct
type AddrRuleUpdate (line 78) | type AddrRuleUpdate struct
type BatchRuleOperate (line 83) | type BatchRuleOperate struct
type IptablesOp (line 88) | type IptablesOp struct
type IptablesRuleOp (line 93) | type IptablesRuleOp struct
type IptablesBatchOperate (line 106) | type IptablesBatchOperate struct
type IptablesChainStatus (line 110) | type IptablesChainStatus struct
FILE: agent/app/dto/ftp.go
type FtpInfo (line 7) | type FtpInfo struct
type FtpBaseInfo (line 18) | type FtpBaseInfo struct
type FtpLogSearch (line 23) | type FtpLogSearch struct
type FtpCreate (line 29) | type FtpCreate struct
type FtpUpdate (line 36) | type FtpUpdate struct
FILE: agent/app/dto/group.go
type GroupCreate (line 3) | type GroupCreate struct
type GroupSearch (line 9) | type GroupSearch struct
type GroupUpdate (line 13) | type GroupUpdate struct
type GroupInfo (line 20) | type GroupInfo struct
type OperateByType (line 27) | type OperateByType struct
FILE: agent/app/dto/host.go
type HostOperate (line 5) | type HostOperate struct
type HostConnTest (line 21) | type HostConnTest struct
type SearchForTree (line 31) | type SearchForTree struct
type HostInfo (line 35) | type HostInfo struct
type HostTree (line 53) | type HostTree struct
type TreeChild (line 59) | type TreeChild struct
FILE: agent/app/dto/image.go
type PageImage (line 5) | type PageImage struct
type ImageInfo (line 12) | type ImageInfo struct
type ImageLoad (line 23) | type ImageLoad struct
type ImageBuild (line 28) | type ImageBuild struct
type ImagePull (line 37) | type ImagePull struct
type ImageTag (line 43) | type ImageTag struct
type ImagePush (line 48) | type ImagePush struct
type ImageSave (line 55) | type ImageSave struct
FILE: agent/app/dto/image_repo.go
type ImageRepoCreate (line 5) | type ImageRepoCreate struct
type ImageRepoUpdate (line 14) | type ImageRepoUpdate struct
type ImageRepoInfo (line 23) | type ImageRepoInfo struct
type ImageRepoOption (line 36) | type ImageRepoOption struct
type ImageRepoDelete (line 42) | type ImageRepoDelete struct
FILE: agent/app/dto/logs.go
type SearchTaskLogReq (line 7) | type SearchTaskLogReq struct
type TaskDTO (line 13) | type TaskDTO struct
FILE: agent/app/dto/monitor.go
type MonitorSearch (line 5) | type MonitorSearch struct
type MonitorData (line 13) | type MonitorData struct
type Process (line 19) | type Process struct
type MonitorSetting (line 28) | type MonitorSetting struct
type MonitorSettingUpdate (line 36) | type MonitorSettingUpdate struct
type MonitorGPUOptions (line 41) | type MonitorGPUOptions struct
type GPUChartHide (line 46) | type GPUChartHide struct
type MonitorGPUSearch (line 55) | type MonitorGPUSearch struct
type MonitorGPUData (line 60) | type MonitorGPUData struct
type GPUProcess (line 76) | type GPUProcess struct
FILE: agent/app/dto/nginx.go
type NginxFull (line 8) | type NginxFull struct
type NginxConfig (line 19) | type NginxConfig struct
type NginxParam (line 25) | type NginxParam struct
type NginxAuth (line 31) | type NginxAuth struct
type NginxPathAuth (line 36) | type NginxPathAuth struct
type NginxKey (line 43) | type NginxKey
constant Index (line 46) | Index NginxKey = "index"
constant LimitConn (line 47) | LimitConn NginxKey = "limit-conn"
constant SSL (line 48) | SSL NginxKey = "ssl"
constant CACHE (line 49) | CACHE NginxKey = "cache"
constant HttpPer (line 50) | HttpPer NginxKey = "http-per"
constant ProxyCache (line 51) | ProxyCache NginxKey = "proxy-cache"
type NginxUpstream (line 68) | type NginxUpstream struct
type NginxUpstreamServer (line 75) | type NginxUpstreamServer struct
type NginxModule (line 89) | type NginxModule struct
FILE: agent/app/dto/request/app.go
type AppSearch (line 9) | type AppSearch struct
type AppInstallCreate (line 19) | type AppInstallCreate struct
type NodePushConfig (line 30) | type NodePushConfig struct
type AppContainerConfig (line 37) | type AppContainerConfig struct
type AppInstalledSearch (line 55) | type AppInstalledSearch struct
type AppInstalledInfo (line 67) | type AppInstalledInfo struct
type AppBackupSearch (line 72) | type AppBackupSearch struct
type AppBackupDelete (line 77) | type AppBackupDelete struct
type AppInstalledOperate (line 81) | type AppInstalledOperate struct
type AppInstallUpgrade (line 97) | type AppInstallUpgrade struct
type AppInstallDelete (line 106) | type AppInstallDelete struct
type AppInstalledUpdate (line 115) | type AppInstalledUpdate struct
type AppConfigUpdate (line 121) | type AppConfigUpdate struct
type AppInstalledIgnoreUpgrade (line 126) | type AppInstalledIgnoreUpgrade struct
type PortUpdate (line 131) | type PortUpdate struct
type AppUpdateVersion (line 137) | type AppUpdateVersion struct
type AppInstallSortItem (line 142) | type AppInstallSortItem struct
type AppInstallSort (line 147) | type AppInstallSort struct
FILE: agent/app/dto/request/app_ignore_upgrade.go
type AppIgnoreUpgradeReq (line 3) | type AppIgnoreUpgradeReq struct
FILE: agent/app/dto/request/common.go
type ReqWithID (line 3) | type ReqWithID struct
FILE: agent/app/dto/request/disk.go
type DiskPartitionRequest (line 3) | type DiskPartitionRequest struct
type DiskMountRequest (line 11) | type DiskMountRequest struct
type DiskUnmountRequest (line 19) | type DiskUnmountRequest struct
FILE: agent/app/dto/request/favorite.go
type FavoriteCreate (line 3) | type FavoriteCreate struct
type FavoriteDelete (line 7) | type FavoriteDelete struct
FILE: agent/app/dto/request/file.go
type FileOption (line 8) | type FileOption struct
type FileContentReq (line 12) | type FileContentReq struct
type SearchUploadWithPage (line 16) | type SearchUploadWithPage struct
type FileCreate (line 21) | type FileCreate struct
type FileRoleReq (line 32) | type FileRoleReq struct
type FileDelete (line 40) | type FileDelete struct
type FileBatchDelete (line 46) | type FileBatchDelete struct
type FileCompress (line 51) | type FileCompress struct
type FileDeCompress (line 60) | type FileDeCompress struct
type FileEdit (line 67) | type FileEdit struct
type FileRename (line 72) | type FileRename struct
type FilePathCheck (line 77) | type FilePathCheck struct
type FilePathsCheck (line 82) | type FilePathsCheck struct
type FileWget (line 86) | type FileWget struct
type FileMove (line 93) | type FileMove struct
type FileDownload (line 102) | type FileDownload struct
type FileChunkDownload (line 109) | type FileChunkDownload struct
type DirSizeReq (line 114) | type DirSizeReq struct
type FileProcessReq (line 118) | type FileProcessReq struct
type FileRoleUpdate (line 122) | type FileRoleUpdate struct
type FileReadByLineReq (line 129) | type FileReadByLineReq struct
type TaskReq (line 139) | type TaskReq struct
type FileExistReq (line 146) | type FileExistReq struct
type FileConvert (line 151) | type FileConvert struct
type FileConvertRequest (line 160) | type FileConvertRequest struct
type FileRemarkBatch (line 167) | type FileRemarkBatch struct
type FileRemarkUpdate (line 171) | type FileRemarkUpdate struct
FILE: agent/app/dto/request/host_tool.go
type HostToolReq (line 3) | type HostToolReq struct
type HostToolCreate (line 8) | type HostToolCreate struct
type SupervisorConfig (line 13) | type SupervisorConfig struct
type HostToolLogReq (line 18) | type HostToolLogReq struct
type HostToolConfig (line 22) | type HostToolConfig struct
type SupervisorProcessConfig (line 28) | type SupervisorProcessConfig struct
type SupervisorProcessFileReq (line 40) | type SupervisorProcessFileReq struct
FILE: agent/app/dto/request/mcp_server.go
type McpServerSearch (line 5) | type McpServerSearch struct
type McpServerCreate (line 11) | type McpServerCreate struct
type McpServerUpdate (line 26) | type McpServerUpdate struct
type McpServerDelete (line 31) | type McpServerDelete struct
type McpServerOperate (line 35) | type McpServerOperate struct
type McpBindDomain (line 40) | type McpBindDomain struct
type McpBindDomainUpdate (line 46) | type McpBindDomainUpdate struct
FILE: agent/app/dto/request/nginx.go
type NginxConfigFileUpdate (line 5) | type NginxConfigFileUpdate struct
type NginxScopeReq (line 10) | type NginxScopeReq struct
type NginxConfigUpdate (line 15) | type NginxConfigUpdate struct
type NginxRewriteReq (line 22) | type NginxRewriteReq struct
type CustomRewriteOperate (line 27) | type CustomRewriteOperate struct
type NginxRewriteUpdate (line 33) | type NginxRewriteUpdate struct
type NginxProxyUpdate (line 39) | type NginxProxyUpdate struct
type NginxProxyCacheUpdate (line 45) | type NginxProxyCacheUpdate struct
type NginxAuthUpdate (line 56) | type NginxAuthUpdate struct
type NginxPathAuthUpdate (line 64) | type NginxPathAuthUpdate struct
type NginxAuthReq (line 74) | type NginxAuthReq struct
type NginxCommonReq (line 78) | type NginxCommonReq struct
type NginxAntiLeechUpdate (line 82) | type NginxAntiLeechUpdate struct
type NginxRedirectReq (line 96) | type NginxRedirectReq struct
type NginxRedirectUpdate (line 110) | type NginxRedirectUpdate struct
type NginxBuildReq (line 116) | type NginxBuildReq struct
type NginxModuleUpdate (line 121) | type NginxModuleUpdate struct
type NginxOperateReq (line 130) | type NginxOperateReq struct
type NginxDefaultHTTPSUpdate (line 134) | type NginxDefaultHTTPSUpdate struct
FILE: agent/app/dto/request/php_extensions.go
type PHPExtensionsSearch (line 5) | type PHPExtensionsSearch struct
type PHPExtensionsCreate (line 10) | type PHPExtensionsCreate struct
type PHPExtensionsUpdate (line 15) | type PHPExtensionsUpdate struct
type PHPExtensionsDelete (line 20) | type PHPExtensionsDelete struct
FILE: agent/app/dto/request/process.go
type ProcessReq (line 3) | type ProcessReq struct
FILE: agent/app/dto/request/recycle_bin.go
type RecycleBinCreate (line 3) | type RecycleBinCreate struct
type RecycleBinReduce (line 7) | type RecycleBinReduce struct
FILE: agent/app/dto/request/runtime.go
type RuntimeSearch (line 7) | type RuntimeSearch struct
type RuntimeCreate (line 14) | type RuntimeCreate struct
type NodeConfig (line 29) | type NodeConfig struct
type Environment (line 38) | type Environment struct
type Volume (line 42) | type Volume struct
type ExposedPort (line 47) | type ExposedPort struct
type ExtraHost (line 53) | type ExtraHost struct
type RuntimeDelete (line 58) | type RuntimeDelete struct
type RuntimeUpdate (line 63) | type RuntimeUpdate struct
type NodePackageReq (line 77) | type NodePackageReq struct
type RuntimeOperate (line 81) | type RuntimeOperate struct
type NodeModuleOperateReq (line 86) | type NodeModuleOperateReq struct
type NodeModuleReq (line 93) | type NodeModuleReq struct
type PHPExtensionInstallReq (line 97) | type PHPExtensionInstallReq struct
type PHPConfigUpdate (line 103) | type PHPConfigUpdate struct
type PHPFileUpdate (line 112) | type PHPFileUpdate struct
type PHPFileReq (line 118) | type PHPFileReq struct
type FPMConfig (line 123) | type FPMConfig struct
type PHPSupervisorProcessConfig (line 128) | type PHPSupervisorProcessConfig struct
type PHPSupervisorProcessFileReq (line 133) | type PHPSupervisorProcessFileReq struct
type PHPContainerConfig (line 138) | type PHPContainerConfig struct
type RuntimeRemark (line 147) | type RuntimeRemark struct
FILE: agent/app/dto/request/tensorrt_llm.go
type TensorRTLLMSearch (line 5) | type TensorRTLLMSearch struct
type TensorRTLLMCreate (line 10) | type TensorRTLLMCreate struct
type TensorRTLLMUpdate (line 22) | type TensorRTLLMUpdate struct
type TensorRTLLMDelete (line 27) | type TensorRTLLMDelete struct
type TensorRTLLMOperate (line 31) | type TensorRTLLMOperate struct
type DockerConfig (line 36) | type DockerConfig struct
FILE: agent/app/dto/request/website.go
type WebsiteSearch (line 7) | type WebsiteSearch struct
type WebsiteCreate (line 16) | type WebsiteCreate struct
type StreamConfig (line 44) | type StreamConfig struct
type StreamUpdate (line 53) | type StreamUpdate struct
type WebsiteOptionReq (line 59) | type WebsiteOptionReq struct
type RuntimeConfig (line 63) | type RuntimeConfig struct
type FtpConfig (line 68) | type FtpConfig struct
type DataBaseConfig (line 73) | type DataBaseConfig struct
type SSLConfig (line 82) | type SSLConfig struct
type NewAppInstall (line 87) | type NewAppInstall struct
type WebsiteInstallCheckReq (line 95) | type WebsiteInstallCheckReq struct
type WebsiteUpdate (line 99) | type WebsiteUpdate struct
type WebsiteDelete (line 109) | type WebsiteDelete struct
type WebsiteOp (line 117) | type WebsiteOp struct
type BatchWebsiteOp (line 122) | type BatchWebsiteOp struct
type BatchWebsiteGroup (line 128) | type BatchWebsiteGroup struct
type BatchWebsiteHttps (line 133) | type BatchWebsiteHttps struct
type WebsiteRedirectUpdate (line 152) | type WebsiteRedirectUpdate struct
type WebsiteRecover (line 158) | type WebsiteRecover struct
type WebsiteRecoverByFile (line 164) | type WebsiteRecoverByFile struct
type WebsiteGroupCreate (line 171) | type WebsiteGroupCreate struct
type WebsiteGroupUpdate (line 175) | type WebsiteGroupUpdate struct
type WebsiteDomainCreate (line 181) | type WebsiteDomainCreate struct
type WebsiteDomainUpdate (line 186) | type WebsiteDomainUpdate struct
type WebsiteDomain (line 191) | type WebsiteDomain struct
type WebsiteDomainDelete (line 197) | type WebsiteDomainDelete struct
type WebsiteHTTPSOp (line 201) | type WebsiteHTTPSOp struct
type WebsiteNginxUpdate (line 220) | type WebsiteNginxUpdate struct
type WebsiteLogReq (line 225) | type WebsiteLogReq struct
type WebsiteDefaultUpdate (line 233) | type WebsiteDefaultUpdate struct
type WebsitePHPVersionReq (line 237) | type WebsitePHPVersionReq struct
type WebsiteUpdateDir (line 242) | type WebsiteUpdateDir struct
type WebsiteUpdateDirPermission (line 247) | type WebsiteUpdateDirPermission struct
type WebsiteProxyConfig (line 253) | type WebsiteProxyConfig struct
type WebsiteProxyDelete (line 275) | type WebsiteProxyDelete struct
type WebsiteProxyStatusUpdate (line 280) | type WebsiteProxyStatusUpdate struct
type CorsConfig (line 286) | type CorsConfig struct
type CorsConfigReq (line 295) | type CorsConfigReq struct
type WebsiteProxyReq (line 300) | type WebsiteProxyReq struct
type WebsiteRedirectReq (line 304) | type WebsiteRedirectReq struct
type WebsiteCommonReq (line 308) | type WebsiteCommonReq struct
type WafWebsite (line 312) | type WafWebsite struct
type WebsiteHtmlReq (line 318) | type WebsiteHtmlReq struct
type WebsiteHtmlUpdate (line 322) | type WebsiteHtmlUpdate struct
type WebsiteLBCreate (line 328) | type WebsiteLBCreate struct
type WebsiteLBUpdate (line 335) | type WebsiteLBUpdate struct
type WebsiteLBDelete (line 342) | type WebsiteLBDelete struct
type WebsiteLBUpdateFile (line 347) | type WebsiteLBUpdateFile struct
type WebsiteRealIP (line 353) | type WebsiteRealIP struct
type ChangeDatabase (line 361) | type ChangeDatabase struct
type WebsiteProxyDel (line 367) | type WebsiteProxyDel struct
type CrossSiteAccessOp (line 372) | type CrossSiteAccessOp struct
type ExecComposerReq (line 377) | type ExecComposerReq struct
FILE: agent/app/dto/request/website_ssl.go
type WebsiteSSLSearch (line 5) | type WebsiteSSLSearch struct
type WebsiteSSLListReq (line 13) | type WebsiteSSLListReq struct
type WebsiteSSLCreate (line 17) | type WebsiteSSLCreate struct
type WebsiteDNSReq (line 41) | type WebsiteDNSReq struct
type WebsiteSSLRenew (line 46) | type WebsiteSSLRenew struct
type WebsiteSSLApply (line 50) | type WebsiteSSLApply struct
type WebsiteSSLObtain (line 57) | type WebsiteSSLObtain struct
type WebsiteAcmeAccountCreate (line 62) | type WebsiteAcmeAccountCreate struct
type WebsiteAcmeAccountUpdate (line 73) | type WebsiteAcmeAccountUpdate struct
type WebsiteDnsAccountCreate (line 78) | type WebsiteDnsAccountCreate struct
type WebsiteDnsAccountUpdate (line 84) | type WebsiteDnsAccountUpdate struct
type WebsiteResourceReq (line 91) | type WebsiteResourceReq struct
type WebsiteBatchDelReq (line 95) | type WebsiteBatchDelReq struct
type WebsiteSSLUpdate (line 99) | type WebsiteSSLUpdate struct
type WebsiteSSLUpload (line 122) | type WebsiteSSLUpload struct
type WebsiteCASearch (line 132) | type WebsiteCASearch struct
type WebsiteCACreate (line 136) | type WebsiteCACreate struct
type WebsiteCAObtain (line 147) | type WebsiteCAObtain struct
type WebsiteCARenew (line 163) | type WebsiteCARenew struct
type WebsiteSSLFileUpload (line 167) | type WebsiteSSLFileUpload struct
FILE: agent/app/dto/response/app.go
type AppRes (line 12) | type AppRes struct
type AppUpdateRes (line 17) | type AppUpdateRes struct
type AppDTO (line 24) | type AppDTO struct
type AppItem (line 31) | type AppItem struct
type TagDTO (line 46) | type TagDTO struct
type AppInstalledCheck (line 52) | type AppInstalledCheck struct
type AppDetailDTO (line 68) | type AppDetailDTO struct
type AppDetailSimpleDTO (line 79) | type AppDetailSimpleDTO struct
type IgnoredApp (line 83) | type IgnoredApp struct
type AppInstalledDTO (line 90) | type AppInstalledDTO struct
type AppDetail (line 100) | type AppDetail struct
type AppInstallDTO (line 106) | type AppInstallDTO struct
type AppInstallInfo (line 137) | type AppInstallInfo struct
type DatabaseConn (line 152) | type DatabaseConn struct
type AppService (line 161) | type AppService struct
type AppParam (line 169) | type AppParam struct
type AppConfig (line 184) | type AppConfig struct
FILE: agent/app/dto/response/app_ignore_upgrade.go
type AppIgnoreUpgradeDTO (line 3) | type AppIgnoreUpgradeDTO struct
FILE: agent/app/dto/response/disk.go
type DiskInfo (line 3) | type DiskInfo struct
type DiskBasicInfo (line 8) | type DiskBasicInfo struct
type CompleteDiskInfo (line 24) | type CompleteDiskInfo struct
type MountInfo (line 32) | type MountInfo struct
FILE: agent/app/dto/response/favorite.go
type FavoriteDTO (line 5) | type FavoriteDTO struct
FILE: agent/app/dto/response/file.go
type FileInfo (line 9) | type FileInfo struct
type UploadInfo (line 13) | type UploadInfo struct
type FileTree (line 19) | type FileTree struct
type DirSizeRes (line 28) | type DirSizeRes struct
type FileProcessKeys (line 32) | type FileProcessKeys struct
type FileWgetRes (line 36) | type FileWgetRes struct
type FileLineContent (line 40) | type FileLineContent struct
type FileExist (line 50) | type FileExist struct
type ExistFileInfo (line 54) | type ExistFileInfo struct
type UserInfo (line 62) | type UserInfo struct
type UserGroupResponse (line 67) | type UserGroupResponse struct
type DepthDirSizeRes (line 72) | type DepthDirSizeRes struct
type FileConvertLog (line 77) | type FileConvertLog struct
type FileRemarksRes (line 85) | type FileRemarksRes struct
FILE: agent/app/dto/response/host_tool.go
type HostToolRes (line 3) | type HostToolRes struct
type Supervisor (line 8) | type Supervisor struct
type HostToolConfig (line 21) | type HostToolConfig struct
type SupervisorProcessConfig (line 25) | type SupervisorProcessConfig struct
type ProcessStatus (line 38) | type ProcessStatus struct
FILE: agent/app/dto/response/mcp_server.go
type McpServersRes (line 8) | type McpServersRes struct
type McpServerDTO (line 13) | type McpServerDTO struct
type McpBindDomainRes (line 19) | type McpBindDomainRes struct
FILE: agent/app/dto/response/nginx.go
type NginxStatus (line 5) | type NginxStatus struct
type NginxParam (line 15) | type NginxParam struct
type NginxAuthRes (line 20) | type NginxAuthRes struct
type NginxPathAuthRes (line 25) | type NginxPathAuthRes struct
type NginxAntiLeechRes (line 29) | type NginxAntiLeechRes struct
type NginxRedirectConfig (line 42) | type NginxRedirectConfig struct
type NginxFile (line 57) | type NginxFile struct
type NginxProxyCache (line 61) | type NginxProxyCache struct
type NginxModule (line 71) | type NginxModule struct
type NginxBuildConfig (line 79) | type NginxBuildConfig struct
type NginxConfigRes (line 84) | type NginxConfigRes struct
FILE: agent/app/dto/response/php_extensions.go
type PHPExtensionsDTO (line 5) | type PHPExtensionsDTO struct
FILE: agent/app/dto/response/recycle_bin.go
type RecycleBinDTO (line 5) | type RecycleBinDTO struct
FILE: agent/app/dto/response/runtime.go
type RuntimeDTO (line 10) | type RuntimeDTO struct
type PackageScripts (line 37) | type PackageScripts struct
function NewRuntimeDTO (line 42) | func NewRuntimeDTO(runtime model.Runtime) RuntimeDTO {
type NodeModule (line 62) | type NodeModule struct
type SupportExtension (line 69) | type SupportExtension struct
type PHPExtensionRes (line 78) | type PHPExtensionRes struct
type FpmStatusItem (line 83) | type FpmStatusItem struct
FILE: agent/app/dto/response/system.go
type ComponentInfo (line 3) | type ComponentInfo struct
FILE: agent/app/dto/response/tensorrt_llm.go
type TensorRTLLMsRes (line 8) | type TensorRTLLMsRes struct
type TensorRTLLMDTO (line 13) | type TensorRTLLMDTO struct
FILE: agent/app/dto/response/website.go
type WebsiteDTO (line 10) | type WebsiteDTO struct
type WebsiteRes (line 26) | type WebsiteRes struct
type WebsiteOption (line 49) | type WebsiteOption struct
type WebsitePreInstallCheck (line 55) | type WebsitePreInstallCheck struct
type WebsiteNginxConfig (line 62) | type WebsiteNginxConfig struct
type WebsiteHTTPS (line 67) | type WebsiteHTTPS struct
type WebsiteLog (line 80) | type WebsiteLog struct
type PHPConfig (line 87) | type PHPConfig struct
type NginxRewriteRes (line 94) | type NginxRewriteRes struct
type WebsiteDirConfig (line 98) | type WebsiteDirConfig struct
type WebsiteHtmlRes (line 105) | type WebsiteHtmlRes struct
type WebsiteRealIP (line 109) | type WebsiteRealIP struct
type Resource (line 117) | type Resource struct
type Database (line 124) | type Database struct
FILE: agent/app/dto/response/website_ssl.go
type WebsiteSSLDTO (line 5) | type WebsiteSSLDTO struct
type WebsiteDNSRes (line 10) | type WebsiteDNSRes struct
type WebsiteAcmeAccountDTO (line 17) | type WebsiteAcmeAccountDTO struct
type WebsiteDnsAccountDTO (line 21) | type WebsiteDnsAccountDTO struct
type WebsiteCADTO (line 26) | type WebsiteCADTO struct
FILE: agent/app/dto/setting.go
type SettingInfo (line 3) | type SettingInfo struct
type SettingUpdate (line 29) | type SettingUpdate struct
type SyncTime (line 34) | type SyncTime struct
type CleanData (line 38) | type CleanData struct
type CleanTree (line 47) | type CleanTree struct
type Clean (line 60) | type Clean struct
type SSHDefaultConn (line 66) | type SSHDefaultConn struct
type SSHConnData (line 70) | type SSHConnData struct
type SystemProxy (line 82) | type SystemProxy struct
type TerminalAIInfo (line 90) | type TerminalAIInfo struct
type CommonDescription (line 97) | type CommonDescription struct
FILE: agent/app/dto/snapshot.go
type PageSnapshot (line 5) | type PageSnapshot struct
type SnapshotCreate (line 12) | type SnapshotCreate struct
type SnapshotData (line 37) | type SnapshotData struct
type DataTree (line 50) | type DataTree struct
type SnapshotRecover (line 65) | type SnapshotRecover struct
type SnapshotBatchDelete (line 72) | type SnapshotBatchDelete struct
type SnapshotImport (line 77) | type SnapshotImport struct
type SnapshotInfo (line 83) | type SnapshotInfo struct
FILE: agent/app/dto/ssh.go
type SSHUpdate (line 5) | type SSHUpdate struct
type SSHInfo (line 11) | type SSHInfo struct
type RootCertOperate (line 25) | type RootCertOperate struct
type RootCert (line 35) | type RootCert struct
type GenerateLoad (line 46) | type GenerateLoad struct
type SSHConf (line 50) | type SSHConf struct
type SearchSSHLog (line 53) | type SearchSSHLog struct
type SSHHistory (line 59) | type SSHHistory struct
FILE: agent/app/model/agent.go
type Agent (line 3) | type Agent struct
FILE: agent/app/model/agent_account.go
type AgentAccount (line 3) | type AgentAccount struct
method TableName (line 15) | func (AgentAccount) TableName() string {
FILE: agent/app/model/agent_account_model.go
type AgentAccountModel (line 3) | type AgentAccountModel struct
method TableName (line 15) | func (AgentAccountModel) TableName() string {
FILE: agent/app/model/ai.go
type OllamaModel (line 3) | type OllamaModel struct
FILE: agent/app/model/alert.go
type Alert (line 3) | type Alert struct
type AlertTask (line 17) | type AlertTask struct
type AlertLog (line 25) | type AlertLog struct
type AlertConfig (line 40) | type AlertConfig struct
type LoginLog (line 48) | type LoginLog struct
FILE: agent/app/model/app.go
type App (line 13) | type App struct
method IsLocalApp (line 44) | func (i *App) IsLocalApp() bool {
method IsCustomApp (line 47) | func (i *App) IsCustomApp() bool {
method GetAppResourcePath (line 51) | func (i *App) GetAppResourcePath() string {
method GetDescription (line 69) | func (i *App) GetDescription(ctx *gin.Context) string {
function getLang (line 61) | func getLang(c *gin.Context) string {
FILE: agent/app/model/app_detail.go
type AppDetail (line 3) | type AppDetail struct
FILE: agent/app/model/app_ignore_upgrade.go
type AppIgnoreUpgrade (line 3) | type AppIgnoreUpgrade struct
FILE: agent/app/model/app_install.go
type AppInstall (line 11) | type AppInstall struct
method GetPath (line 34) | func (i *AppInstall) GetPath() string {
method GetComposePath (line 38) | func (i *AppInstall) GetComposePath() string {
method GetEnvPath (line 42) | func (i *AppInstall) GetEnvPath() string {
method GetAppPath (line 46) | func (i *AppInstall) GetAppPath() string {
FILE: agent/app/model/app_install_resource.go
type AppInstallResource (line 3) | type AppInstallResource struct
FILE: agent/app/model/app_launcher.go
type AppLauncher (line 3) | type AppLauncher struct
type QuickJump (line 8) | type QuickJump struct
FILE: agent/app/model/app_tag.go
type AppTag (line 3) | type AppTag struct
FILE: agent/app/model/backup.go
type BackupAccount (line 3) | type BackupAccount struct
type BackupRecord (line 17) | type BackupRecord struct
FILE: agent/app/model/base.go
type BaseModel (line 5) | type BaseModel struct
FILE: agent/app/model/clam.go
type Clam (line 5) | type Clam struct
type ClamRecord (line 22) | type ClamRecord struct
FILE: agent/app/model/compose_template.go
type ComposeTemplate (line 3) | type ComposeTemplate struct
type Compose (line 11) | type Compose struct
FILE: agent/app/model/cronjob.go
type Cronjob (line 7) | type Cronjob struct
type JobRecords (line 51) | type JobRecords struct
type ScriptLibrary (line 65) | type ScriptLibrary struct
FILE: agent/app/model/database.go
type Database (line 3) | type Database struct
FILE: agent/app/model/database_mysql.go
type DatabaseMysql (line 3) | type DatabaseMysql struct
FILE: agent/app/model/database_postgresql.go
type DatabasePostgresql (line 3) | type DatabasePostgresql struct
FILE: agent/app/model/favorite.go
type Favorite (line 3) | type Favorite struct
FILE: agent/app/model/firewall.go
type Firewall (line 3) | type Firewall struct
FILE: agent/app/model/ftp.go
type Ftp (line 3) | type Ftp struct
FILE: agent/app/model/group.go
type Group (line 3) | type Group struct
FILE: agent/app/model/host.go
type Host (line 3) | type Host struct
FILE: agent/app/model/image_repo.go
type ImageRepo (line 3) | type ImageRepo struct
FILE: agent/app/model/mcp_server.go
type McpServer (line 3) | type McpServer struct
FILE: agent/app/model/monitor.go
type MonitorBase (line 3) | type MonitorBase struct
type MonitorIO (line 19) | type MonitorIO struct
type MonitorNetwork (line 28) | type MonitorNetwork struct
type MonitorGPU (line 35) | type MonitorGPU struct
FILE: agent/app/model/php_extensions.go
type PHPExtensions (line 3) | type PHPExtensions struct
FILE: agent/app/model/runtime.go
type Runtime (line 9) | type Runtime struct
method GetComposePath (line 29) | func (r *Runtime) GetComposePath() string {
method GetEnvPath (line 33) | func (r *Runtime) GetEnvPath() string {
method GetPath (line 37) | func (r *Runtime) GetPath() string {
method GetFPMPath (line 41) | func (r *Runtime) GetFPMPath() string {
method GetPHPPath (line 45) | func (r *Runtime) GetPHPPath() string {
method GetLogPath (line 49) | func (r *Runtime) GetLogPath() string {
method GetSlowLogPath (line 53) | func (r *Runtime) GetSlowLogPath() string {
FILE: agent/app/model/setting.go
type Setting (line 3) | type Setting struct
type CommonDescription (line 10) | type CommonDescription struct
type NodeInfo (line 18) | type NodeInfo struct
type LocalConnInfo (line 27) | type LocalConnInfo struct
FILE: agent/app/model/snapshot.go
type Snapshot (line 3) | type Snapshot struct
FILE: agent/app/model/ssh.go
type RootCert (line 3) | type RootCert struct
FILE: agent/app/model/tag.go
type Tag (line 3) | type Tag struct
FILE: agent/app/model/task.go
type Task (line 5) | type Task struct
FILE: agent/app/model/tensorrt_llm.go
type TensorRTLLM (line 3) | type TensorRTLLM struct
FILE: agent/app/model/website.go
type Website (line 5) | type Website struct
method TableName (line 46) | func (w Website) TableName() string {
FILE: agent/app/model/website_acme_account.go
type WebsiteAcmeAccount (line 3) | type WebsiteAcmeAccount struct
method TableName (line 17) | func (w WebsiteAcmeAccount) TableName() string {
FILE: agent/app/model/website_ca.go
type WebsiteCA (line 3) | type WebsiteCA struct
FILE: agent/app/model/website_dns_account.go
type WebsiteDnsAccount (line 3) | type WebsiteDnsAccount struct
method TableName (line 10) | func (w WebsiteDnsAccount) TableName() string {
FILE: agent/app/model/website_domain.go
type WebsiteDomain (line 3) | type WebsiteDomain struct
method TableName (line 11) | func (w WebsiteDomain) TableName() string {
FILE: agent/app/model/website_ssl.go
type WebsiteSSL (line 11) | type WebsiteSSL struct
method TableName (line 51) | func (w WebsiteSSL) TableName() string {
method GetLogPath (line 55) | func (w WebsiteSSL) GetLogPath() string {
FILE: agent/app/provider/catalog.go
type Model (line 7) | type Model struct
type Meta (line 16) | type Meta struct
function Get (line 203) | func Get(key string) (Meta, bool) {
function All (line 211) | func All() map[string]Meta {
function DefaultBaseURL (line 219) | func DefaultBaseURL(key string) (string, bool) {
function EnvKey (line 227) | func EnvKey(key string) string {
function DisplayName (line 235) | func DisplayName(key string) string {
function cloneMeta (line 246) | func cloneMeta(meta Meta) Meta {
function normalizeModel (line 257) | func normalizeModel(provider string, model Model) Model {
function defaultModelInputs (line 282) | func defaultModelInputs(provider string) []string {
function catalogRuntimeDefaults (line 291) | func catalogRuntimeDefaults(provider string) (int, int) {
FILE: agent/app/provider/openclaw.go
type OpenClawPatch (line 8) | type OpenClawPatch struct
function BuildOpenClawPatch (line 13) | func BuildOpenClawPatch(provider, modelName, apiType string, maxTokens, ...
function buildDeepseekPatch (line 50) | func buildDeepseekPatch(modelName, baseURL, apiKey string) *OpenClawPatch {
function buildMoonshotPatch (line 65) | func buildMoonshotPatch(provider, modelName, modelID, baseURL, apiKey st...
function buildBailianPatch (line 86) | func buildBailianPatch(modelID string, maxTokens, contextWindow int, bas...
function buildArkPatch (line 102) | func buildArkPatch(modelID string, maxTokens, contextWindow int, baseURL...
function buildMiniMaxPatch (line 118) | func buildMiniMaxPatch(modelID, baseURL, apiKey string) *OpenClawPatch {
function buildCustomPatch (line 134) | func buildCustomPatch(provider, modelName, apiType string, maxTokens, co...
function buildOllamaPatch (line 150) | func buildOllamaPatch(modelName, modelID, apiType, baseURL string) *Open...
function buildKimiCodingPatch (line 169) | func buildKimiCodingPatch(modelName, modelID, baseURL, apiKey string) *O...
function buildZaiPatch (line 184) | func buildZaiPatch(modelID string, maxTokens, contextWindow int, baseURL...
function buildGenericPatch (line 199) | func buildGenericPatch(provider, modelName, modelID, apiType string, max...
function providerModels (line 220) | func providerModels(provider, apiKey, baseURL, api string, model map[str...
function withCatalogDefault (line 234) | func withCatalogDefault(provider, baseURL string) string {
function firstNonEmpty (line 244) | func firstNonEmpty(values ...string) string {
function fallbackInt (line 253) | func fallbackInt(value, fallback int) int {
function normalizeAPIType (line 260) | func normalizeAPIType(apiType string) string {
function normalizeCustomModel (line 268) | func normalizeCustomModel(modelName string) string {
function normalizeBailianCodingPlanModelID (line 277) | func normalizeBailianCodingPlanModelID(modelID string) string {
function normalizeArkCodingPlanModelID (line 287) | func normalizeArkCodingPlanModelID(modelID string) string {
function normalizeMiniMaxModelID (line 291) | func normalizeMiniMaxModelID(modelID string) string {
function zaiModelDisplayName (line 302) | func zaiModelDisplayName(modelID string) string {
function bailianPrimaryModelID (line 317) | func bailianPrimaryModelID(modelID string) string {
function isReasoningModel (line 332) | func isReasoningModel(modelID string) bool {
FILE: agent/app/provider/verify.go
type VerifyRequest (line 14) | type VerifyRequest struct
constant defaultVerifyTimeout (line 22) | defaultVerifyTimeout = 30 * time.Second
function SkipVerification (line 25) | func SkipVerification(key string) bool {
function VerifyAccount (line 34) | func VerifyAccount(provider, baseURL, apiKey string) error {
function verifyTimeout (line 60) | func verifyTimeout() time.Duration {
function BuildVerifyRequest (line 64) | func BuildVerifyRequest(provider, baseURL, apiKey string) VerifyRequest {
function mustJSON (line 148) | func mustJSON(value interface{}) []byte {
FILE: agent/app/repo/agent.go
type AgentRepo (line 9) | type AgentRepo struct
method Page (line 26) | func (a AgentRepo) Page(page, size int, opts ...DBOption) (int64, []mo...
method GetFirst (line 35) | func (a AgentRepo) GetFirst(opts ...DBOption) (*model.Agent, error) {
method Create (line 43) | func (a AgentRepo) Create(agent *model.Agent) error {
method Save (line 47) | func (a AgentRepo) Save(agent *model.Agent) error {
method DeleteByID (line 51) | func (a AgentRepo) DeleteByID(id uint) error {
method DeleteByAppInstallID (line 55) | func (a AgentRepo) DeleteByAppInstallID(appInstallID uint) error {
method DeleteByAppInstallIDWithCtx (line 62) | func (a AgentRepo) DeleteByAppInstallIDWithCtx(ctx context.Context, ap...
method List (line 69) | func (a AgentRepo) List(opts ...DBOption) ([]model.Agent, error) {
type IAgentRepo (line 11) | type IAgentRepo interface
function NewIAgentRepo (line 22) | func NewIAgentRepo() IAgentRepo {
FILE: agent/app/repo/agent_account.go
type AgentAccountRepo (line 5) | type AgentAccountRepo struct
method Page (line 20) | func (a AgentAccountRepo) Page(page, size int, opts ...DBOption) (int6...
method GetFirst (line 29) | func (a AgentAccountRepo) GetFirst(opts ...DBOption) (*model.AgentAcco...
method Create (line 37) | func (a AgentAccountRepo) Create(account *model.AgentAccount) error {
method Save (line 41) | func (a AgentAccountRepo) Save(account *model.AgentAccount) error {
method DeleteByID (line 45) | func (a AgentAccountRepo) DeleteByID(id uint) error {
method List (line 49) | func (a AgentAccountRepo) List(opts ...DBOption) ([]model.AgentAccount...
type IAgentAccountRepo (line 7) | type IAgentAccountRepo interface
function NewIAgentAccountRepo (line 16) | func NewIAgentAccountRepo() IAgentAccountRepo {
FILE: agent/app/repo/agent_account_model.go
type AgentAccountModelRepo (line 5) | type AgentAccountModelRepo struct
method List (line 20) | func (a AgentAccountModelRepo) List(opts ...DBOption) ([]model.AgentAc...
method GetFirst (line 28) | func (a AgentAccountModelRepo) GetFirst(opts ...DBOption) (*model.Agen...
method Create (line 36) | func (a AgentAccountModelRepo) Create(item *model.AgentAccountModel) e...
method Save (line 40) | func (a AgentAccountModelRepo) Save(item *model.AgentAccountModel) err...
method DeleteByID (line 44) | func (a AgentAccountModelRepo) DeleteByID(id uint) error {
method Delete (line 48) | func (a AgentAccountModelRepo) Delete(opts ...DBOption) error {
type IAgentAccountModelRepo (line 7) | type IAgentAccountModelRepo interface
function NewIAgentAccountModelRepo (line 16) | func NewIAgentAccountModelRepo() IAgentAccountModelRepo {
FILE: agent/app/repo/ai.go
type AiRepo (line 8) | type AiRepo struct
method Get (line 23) | func (u *AiRepo) Get(opts ...DBOption) (model.OllamaModel, error) {
method List (line 33) | func (u *AiRepo) List(opts ...DBOption) ([]model.OllamaModel, error) {
method Page (line 43) | func (u *AiRepo) Page(page, size int, opts ...DBOption) (int64, []mode...
method Create (line 55) | func (u *AiRepo) Create(item *model.OllamaModel) error {
method Update (line 59) | func (u *AiRepo) Update(id uint, vars map[string]interface{}) error {
method Delete (line 63) | func (u *AiRepo) Delete(opts ...DBOption) error {
type IAiRepo (line 10) | type IAiRepo interface
function NewIAiRepo (line 19) | func NewIAiRepo() IAiRepo {
FILE: agent/app/repo/alert.go
type AlertRepo (line 12) | type AlertRepo struct
method WithByType (line 62) | func (a *AlertRepo) WithByType(alertType string) DBOption {
method WithByStatusIn (line 68) | func (a *AlertRepo) WithByStatusIn(status []string) DBOption {
method WithByCount (line 74) | func (a *AlertRepo) WithByCount(count uint) DBOption {
method WithByProject (line 80) | func (a *AlertRepo) WithByProject(project string) DBOption {
method WithByAlertId (line 86) | func (a *AlertRepo) WithByAlertId(alertId uint) DBOption {
method WithByLicenseId (line 92) | func (a *AlertRepo) WithByLicenseId(licenseId string) DBOption {
method WithByRecordId (line 98) | func (a *AlertRepo) WithByRecordId(recordId uint) DBOption {
method WithByMethod (line 104) | func (a *AlertRepo) WithByMethod(method string) DBOption {
method WithByCreateAt (line 110) | func (a *AlertRepo) WithByCreateAt(createAt *date.Date) DBOption {
method Create (line 116) | func (a *AlertRepo) Create(alert *model.Alert) error {
method Save (line 120) | func (a *AlertRepo) Save(alert *model.Alert) error {
method Get (line 124) | func (a *AlertRepo) Get(opts ...DBOption) (model.Alert, error) {
method Page (line 131) | func (a *AlertRepo) Page(page, size int, opts ...DBOption) (int64, []m...
method List (line 141) | func (a *AlertRepo) List(opts ...DBOption) ([]model.Alert, error) {
method Update (line 148) | func (a *AlertRepo) Update(maps map[string]interface{}, opts ...DBOpti...
method Delete (line 153) | func (a *AlertRepo) Delete(opts ...DBOption) error {
method GetLog (line 158) | func (a *AlertRepo) GetLog(opts ...DBOption) (model.AlertLog, error) {
method CreateLog (line 165) | func (a *AlertRepo) CreateLog(log *model.AlertLog) error {
method UpdateLog (line 169) | func (a *AlertRepo) UpdateLog(id uint, maps map[string]interface{}) er...
method BatchUpdateLogBy (line 173) | func (a *AlertRepo) BatchUpdateLogBy(maps map[string]interface{}, opts...
method PageLog (line 181) | func (a *AlertRepo) PageLog(page, size int, opts ...DBOption) (int64, ...
method ListLog (line 193) | func (a *AlertRepo) ListLog(opts ...DBOption) ([]model.AlertLog, error) {
method DeleteLog (line 200) | func (a *AlertRepo) DeleteLog(opts ...DBOption) error {
method CleanAlertLogs (line 205) | func (a *AlertRepo) CleanAlertLogs() error {
method CreateAlertTask (line 209) | func (a *AlertRepo) CreateAlertTask(alertTaskBase *model.AlertTask) er...
method DeleteAlertTask (line 213) | func (a *AlertRepo) DeleteAlertTask(opts ...DBOption) error {
method GetAlertTask (line 218) | func (a *AlertRepo) GetAlertTask(opts ...DBOption) (model.AlertTask, e...
method LoadTaskCount (line 225) | func (a *AlertRepo) LoadTaskCount(alertType string, project string, me...
method GetTaskLog (line 239) | func (a *AlertRepo) GetTaskLog(alertType string, alertId uint) (time.T...
method GetLicensePushCount (line 270) | func (a *AlertRepo) GetLicensePushCount(method string) (uint, error) {
method AlertConfigList (line 281) | func (a *AlertRepo) AlertConfigList(opts ...DBOption) ([]model.AlertCo...
method UpdateAlertConfig (line 288) | func (a *AlertRepo) UpdateAlertConfig(maps map[string]interface{}, opt...
method CreateAlertConfig (line 293) | func (a *AlertRepo) CreateAlertConfig(config *model.AlertConfig) error {
method DeleteAlertConfig (line 297) | func (a *AlertRepo) DeleteAlertConfig(opts ...DBOption) error {
method GetConfig (line 302) | func (a *AlertRepo) GetConfig(opts ...DBOption) (model.AlertConfig, er...
method SyncAll (line 309) | func (a *AlertRepo) SyncAll(data []model.AlertConfig) error {
type IAlertRepo (line 14) | type IAlertRepo interface
function NewIAlertRepo (line 58) | func NewIAlertRepo() IAlertRepo {
function getAlertDB (line 261) | func getAlertDB(opts ...DBOption) (*gorm.DB, error) {
FILE: agent/app/repo/app.go
type AppRepo (line 12) | type AppRepo struct
method WithByLikeName (line 44) | func (a AppRepo) WithByLikeName(name string) DBOption {
method WithKey (line 53) | func (a AppRepo) WithKey(key string) DBOption {
method WithKeyIn (line 59) | func (a AppRepo) WithKeyIn(keys []string) DBOption {
method WithType (line 65) | func (a AppRepo) WithType(typeStr string) DBOption {
method OrderByRecommend (line 71) | func (a AppRepo) OrderByRecommend() DBOption {
method GetRecommend (line 77) | func (a AppRepo) GetRecommend() DBOption {
method WithResource (line 83) | func (a AppRepo) WithResource(resource string) DBOption {
method WithNotLocal (line 89) | func (a AppRepo) WithNotLocal() DBOption {
method WithArch (line 95) | func (a AppRepo) WithArch(arch string) DBOption {
method WithPanelVersion (line 101) | func (a AppRepo) WithPanelVersion(panelVersion string) DBOption {
method Page (line 107) | func (a AppRepo) Page(page, size int, opts ...DBOption) (int64, []mode...
method GetFirst (line 116) | func (a AppRepo) GetFirst(opts ...DBOption) (model.App, error) {
method GetBy (line 125) | func (a AppRepo) GetBy(opts ...DBOption) ([]model.App, error) {
method GetTopRecommend (line 134) | func (a AppRepo) GetTopRecommend() ([]string, error) {
method BatchCreate (line 149) | func (a AppRepo) BatchCreate(ctx context.Context, apps []model.App) er...
method Create (line 153) | func (a AppRepo) Create(ctx context.Context, app *model.App) error {
method Save (line 157) | func (a AppRepo) Save(ctx context.Context, app *model.App) error {
method BatchDelete (line 161) | func (a AppRepo) BatchDelete(ctx context.Context, apps []model.App) er...
method DeleteByIDs (line 165) | func (a AppRepo) DeleteByIDs(ctx context.Context, ids []uint) error {
method DeleteBy (line 169) | func (a AppRepo) DeleteBy(opts ...DBOption) error {
type IAppRepo (line 15) | type IAppRepo interface
function NewIAppRepo (line 40) | func NewIAppRepo() IAppRepo {
FILE: agent/app/repo/app_detail.go
type AppDetailRepo (line 11) | type AppDetailRepo struct
method WithVersion (line 32) | func (a AppDetailRepo) WithVersion(version string) DBOption {
method WithAppId (line 38) | func (a AppDetailRepo) WithAppId(id uint) DBOption {
method WithIgnored (line 44) | func (a AppDetailRepo) WithIgnored() DBOption {
method GetFirst (line 50) | func (a AppDetailRepo) GetFirst(opts ...DBOption) (model.AppDetail, er...
method Update (line 56) | func (a AppDetailRepo) Update(ctx context.Context, detail model.AppDet...
method BatchCreate (line 60) | func (a AppDetailRepo) BatchCreate(ctx context.Context, details []mode...
method DeleteByAppIds (line 64) | func (a AppDetailRepo) DeleteByAppIds(ctx context.Context, appIds []ui...
method DeleteByIDs (line 68) | func (a AppDetailRepo) DeleteByIDs(ctx context.Context, appIds []uint)...
method GetBy (line 72) | func (a AppDetailRepo) GetBy(opts ...DBOption) ([]model.AppDetail, err...
method BatchUpdateBy (line 78) | func (a AppDetailRepo) BatchUpdateBy(maps map[string]interface{}, opts...
method BatchDelete (line 86) | func (a AppDetailRepo) BatchDelete(ctx context.Context, appDetails []m...
type IAppDetailRepo (line 14) | type IAppDetailRepo interface
function NewIAppDetailRepo (line 28) | func NewIAppDetailRepo() IAppDetailRepo {
FILE: agent/app/repo/app_ignore_upgrade.go
type AppIgnoreUpgradeRepo (line 9) | type AppIgnoreUpgradeRepo struct
method WithScope (line 24) | func (a AppIgnoreUpgradeRepo) WithScope(scope string) DBOption {
method WithAppID (line 30) | func (a AppIgnoreUpgradeRepo) WithAppID(appID uint) DBOption {
method List (line 36) | func (a AppIgnoreUpgradeRepo) List(opts ...DBOption) ([]model.AppIgnor...
method Create (line 42) | func (a AppIgnoreUpgradeRepo) Create(appIgnoreUpgrade *model.AppIgnore...
method Delete (line 46) | func (a AppIgnoreUpgradeRepo) Delete(opts ...DBOption) error {
type IAppIgnoreUpgradeRepo (line 12) | type IAppIgnoreUpgradeRepo interface
function NewIAppIgnoreUpgradeRepo (line 20) | func NewIAppIgnoreUpgradeRepo() IAppIgnoreUpgradeRepo {
FILE: agent/app/repo/app_install.go
type AppInstallRepo (line 16) | type AppInstallRepo struct
method WithDetailIdsIn (line 47) | func (a *AppInstallRepo) WithDetailIdsIn(detailIds []uint) DBOption {
method WithDetailIdNotIn (line 53) | func (a *AppInstallRepo) WithDetailIdNotIn(detailIds []uint) DBOption {
method WithAppId (line 59) | func (a *AppInstallRepo) WithAppId(appId uint) DBOption {
method WithIDNotIs (line 65) | func (a *AppInstallRepo) WithIDNotIs(id uint) DBOption {
method WithAppIdsIn (line 71) | func (a *AppInstallRepo) WithAppIdsIn(appIds []uint) DBOption {
method WithAppIdsNotIn (line 77) | func (a *AppInstallRepo) WithAppIdsNotIn(appIds []uint) DBOption {
method WithStatus (line 83) | func (a *AppInstallRepo) WithStatus(status string) DBOption {
method WithServiceName (line 89) | func (a *AppInstallRepo) WithServiceName(serviceName string) DBOption {
method WithContainerName (line 95) | func (a *AppInstallRepo) WithContainerName(containerName string) DBOpt...
method WithPort (line 101) | func (a *AppInstallRepo) WithPort(port int) DBOption {
method WithIdNotInWebsite (line 107) | func (a *AppInstallRepo) WithIdNotInWebsite() DBOption {
method ListBy (line 113) | func (a *AppInstallRepo) ListBy(ctx context.Context, opts ...DBOption)...
method GetFirst (line 120) | func (a *AppInstallRepo) GetFirst(opts ...DBOption) (model.AppInstall,...
method GetFirstByCtx (line 127) | func (a *AppInstallRepo) GetFirstByCtx(ctx context.Context, opts ...DB...
method Create (line 134) | func (a *AppInstallRepo) Create(ctx context.Context, install *model.Ap...
method Save (line 139) | func (a *AppInstallRepo) Save(ctx context.Context, install *model.AppI...
method DeleteBy (line 143) | func (a *AppInstallRepo) DeleteBy(opts ...DBOption) error {
method Delete (line 147) | func (a *AppInstallRepo) Delete(ctx context.Context, install model.App...
method Page (line 152) | func (a *AppInstallRepo) Page(page, size int, opts ...DBOption) (int64...
method BatchUpdateBy (line 161) | func (a *AppInstallRepo) BatchUpdateBy(maps map[string]interface{}, op...
method LoadBaseInfo (line 187) | func (a *AppInstallRepo) LoadBaseInfo(key string, name string) (*RootI...
method LoadInstallAppByKeyAndName (line 251) | func (a *AppInstallRepo) LoadInstallAppByKeyAndName(key string, name s...
type IAppInstallRepo (line 18) | type IAppInstallRepo interface
function NewIAppInstallRepo (line 43) | func NewIAppInstallRepo() IAppInstallRepo {
type RootInfo (line 169) | type RootInfo struct
FILE: agent/app/repo/app_install_resource.go
type AppInstallResourceRpo (line 11) | type AppInstallResourceRpo struct
method WithAppInstallId (line 29) | func (a AppInstallResourceRpo) WithAppInstallId(appInstallId uint) DBO...
method WithLinkId (line 35) | func (a AppInstallResourceRpo) WithLinkId(linkId uint) DBOption {
method WithResourceId (line 41) | func (a AppInstallResourceRpo) WithResourceId(resourceId uint) DBOption {
method GetBy (line 47) | func (a AppInstallResourceRpo) GetBy(opts ...DBOption) ([]model.AppIns...
method GetFirst (line 57) | func (a AppInstallResourceRpo) GetFirst(opts ...DBOption) (model.AppIn...
method Create (line 67) | func (a AppInstallResourceRpo) Create(ctx context.Context, resource *m...
method DeleteBy (line 72) | func (a AppInstallResourceRpo) DeleteBy(ctx context.Context, opts ...D...
method BatchUpdateBy (line 76) | func (a AppInstallResourceRpo) BatchUpdateBy(maps map[string]interface...
type IAppInstallResourceRpo (line 14) | type IAppInstallResourceRpo interface
function NewIAppInstallResourceRpo (line 25) | func NewIAppInstallResourceRpo() IAppInstallResourceRpo {
FILE: agent/app/repo/app_launcher.go
type LauncherRepo (line 8) | type LauncherRepo struct
method Get (line 26) | func (u *LauncherRepo) Get(opts ...DBOption) (model.AppLauncher, error) {
method ListName (line 35) | func (u *LauncherRepo) ListName(opts ...DBOption) ([]string, error) {
method Create (line 49) | func (u *LauncherRepo) Create(launcher *model.AppLauncher) error {
method Save (line 53) | func (u *LauncherRepo) Save(launcher *model.AppLauncher) error {
method Delete (line 57) | func (u *LauncherRepo) Delete(opts ...DBOption) error {
method GetQuickJump (line 65) | func (u *LauncherRepo) GetQuickJump(opts ...DBOption) (model.QuickJump...
method ListQuickJump (line 74) | func (u *LauncherRepo) ListQuickJump(withAll bool) []model.QuickJump {
method UpdateQuicks (line 93) | func (u *LauncherRepo) UpdateQuicks(quicks []model.QuickJump) error {
type ILauncherRepo (line 10) | type ILauncherRepo interface
function NewILauncherRepo (line 22) | func NewILauncherRepo() ILauncherRepo {
FILE: agent/app/repo/app_tag.go
type AppTagRepo (line 10) | type AppTagRepo struct
method WithByTagID (line 30) | func (a AppTagRepo) WithByTagID(tagID uint) DBOption {
method WithByAppID (line 36) | func (a AppTagRepo) WithByAppID(appId uint) DBOption {
method BatchCreate (line 42) | func (a AppTagRepo) BatchCreate(ctx context.Context, tags []*model.App...
method DeleteByAppIds (line 46) | func (a AppTagRepo) DeleteByAppIds(ctx context.Context, appIds []uint)...
method DeleteAll (line 50) | func (a AppTagRepo) DeleteAll(ctx context.Context) error {
method GetByAppId (line 54) | func (a AppTagRepo) GetByAppId(appId uint) ([]model.AppTag, error) {
method GetByTagIds (line 62) | func (a AppTagRepo) GetByTagIds(tagIds []uint) ([]model.AppTag, error) {
method DeleteBy (line 70) | func (a AppTagRepo) DeleteBy(ctx context.Context, opts ...DBOption) er...
method GetFirst (line 74) | func (a AppTagRepo) GetFirst(ctx context.Context, opts ...DBOption) (*...
type IAppTagRepo (line 13) | type IAppTagRepo interface
function NewIAppTagRepo (line 26) | func NewIAppTagRepo() IAppTagRepo {
FILE: agent/app/repo/backup.go
type BackupRepo (line 11) | type BackupRepo struct
method WithByPublic (line 41) | func (u *BackupRepo) WithByPublic(isPublic bool) DBOption {
method Get (line 47) | func (u *BackupRepo) Get(opts ...DBOption) (model.BackupAccount, error) {
method Page (line 57) | func (u *BackupRepo) Page(page, size int, opts ...DBOption) (int64, []...
method List (line 69) | func (u *BackupRepo) List(opts ...DBOption) ([]model.BackupAccount, er...
method Create (line 79) | func (u *BackupRepo) Create(backup *model.BackupAccount) error {
method Save (line 83) | func (u *BackupRepo) Save(backup *model.BackupAccount) error {
method Delete (line 87) | func (u *BackupRepo) Delete(opts ...DBOption) error {
method ListRecord (line 95) | func (u *BackupRepo) ListRecord(opts ...DBOption) ([]model.BackupRecor...
method PageRecord (line 105) | func (u *BackupRepo) PageRecord(page, size int, opts ...DBOption) (int...
method WithByFileName (line 117) | func (u *BackupRepo) WithByFileName(fileName string) DBOption {
method WithByDetailName (line 126) | func (u *BackupRepo) WithByDetailName(detailName string) DBOption {
method WithFileNameStartWith (line 135) | func (u *BackupRepo) WithFileNameStartWith(filePrefix string) DBOption {
method CreateRecord (line 141) | func (u *BackupRepo) CreateRecord(record *model.BackupRecord) error {
method UpdateRecord (line 145) | func (u *BackupRepo) UpdateRecord(record *model.BackupRecord) error {
method UpdateRecordByMap (line 149) | func (u *BackupRepo) UpdateRecordByMap(id uint, upMap map[string]inter...
method DeleteRecord (line 153) | func (u *BackupRepo) DeleteRecord(ctx context.Context, opts ...DBOptio...
method WithByCronID (line 157) | func (u *BackupRepo) WithByCronID(cronjobID uint) DBOption {
method GetRecord (line 163) | func (u *BackupRepo) GetRecord(opts ...DBOption) (*model.BackupRecord,...
method SyncAll (line 173) | func (u *BackupRepo) SyncAll(data []model.BackupAccount) error {
type IBackupRepo (line 13) | type IBackupRepo interface
function NewIBackupRepo (line 37) | func NewIBackupRepo() IBackupRepo {
FILE: agent/app/repo/clam.go
type ClamRepo (line 13) | type ClamRepo struct
method Get (line 36) | func (u *ClamRepo) Get(opts ...DBOption) (model.Clam, error) {
method List (line 46) | func (u *ClamRepo) List(opts ...DBOption) ([]model.Clam, error) {
method Page (line 56) | func (u *ClamRepo) Page(page, size int, opts ...DBOption) (int64, []mo...
method Create (line 68) | func (u *ClamRepo) Create(clam *model.Clam) error {
method Update (line 72) | func (u *ClamRepo) Update(id uint, vars map[string]interface{}) error {
method Delete (line 76) | func (u *ClamRepo) Delete(opts ...DBOption) error {
method WithByClamID (line 84) | func (c *ClamRepo) WithByClamID(id uint) DBOption {
method ListRecord (line 90) | func (u *ClamRepo) ListRecord(opts ...DBOption) ([]model.ClamRecord, e...
method RecordFirst (line 100) | func (u *ClamRepo) RecordFirst(id uint) (model.ClamRecord, error) {
method PageRecords (line 106) | func (u *ClamRepo) PageRecords(page, size int, opts ...DBOption) (int6...
method StartRecords (line 117) | func (u *ClamRepo) StartRecords(clamID uint) model.ClamRecord {
method EndRecords (line 129) | func (u *ClamRepo) EndRecords(record model.ClamRecord, status, message...
method DeleteRecord (line 142) | func (u *ClamRepo) DeleteRecord(opts ...DBOption) error {
type IClamRepo (line 15) | type IClamRepo interface
function NewIClamRepo (line 32) | func NewIClamRepo() IClamRepo {
FILE: agent/app/repo/common.go
type DBOption (line 14) | type DBOption
function WithByID (line 16) | func WithByID(id uint) DBOption {
function WithByGroupID (line 22) | func WithByGroupID(id uint) DBOption {
function WithByNOTID (line 28) | func WithByNOTID(id uint) DBOption {
function WithByIDs (line 34) | func WithByIDs(ids []uint) DBOption {
function WithByIDNotIn (line 40) | func WithByIDNotIn(ids []uint) DBOption {
function WithByName (line 46) | func WithByName(name string) DBOption {
function WithByAddr (line 52) | func WithByAddr(addr string) DBOption {
function WithByKey (line 58) | func WithByKey(key string) DBOption {
function WithByLowerName (line 64) | func WithByLowerName(name string) DBOption {
function WithByLikeName (line 70) | func WithByLikeName(name string) DBOption {
function WithByDetailName (line 79) | func WithByDetailName(detailName string) DBOption {
function WithByProvider (line 88) | func WithByProvider(provider string) DBOption {
function WithByModel (line 97) | func WithByModel(model string) DBOption {
function WithByAccountID (line 106) | func WithByAccountID(accountID uint) DBOption {
function WithByType (line 115) | func WithByType(tp string) DBOption {
function WithByDetailType (line 120) | func WithByDetailType(tp string) DBOption {
function WithTypes (line 126) | func WithTypes(types []string) DBOption {
function WithByStatus (line 132) | func WithByStatus(status string) DBOption {
function WithByFrom (line 140) | func WithByFrom(from string) DBOption {
function WithByDate (line 146) | func WithByDate(startTime, endTime time.Time) DBOption {
function WithByGroups (line 152) | func WithByGroups(groupIDs []uint) DBOption {
function WithByCreatedAt (line 161) | func WithByCreatedAt(startTime, endTime time.Time) DBOption {
function WithOrderDesc (line 167) | func WithOrderDesc(orderBy string) DBOption {
function WithOrderAsc (line 171) | func WithOrderAsc(orderBy string) DBOption {
function WithOrderRuleBy (line 175) | func WithOrderRuleBy(orderBy, order string) DBOption {
function getTx (line 200) | func getTx(ctx context.Context, opts ...DBOption) *gorm.DB {
function getDb (line 211) | func getDb(opts ...DBOption) *gorm.DB {
FILE: agent/app/repo/compose_template.go
type ComposeTemplateRepo (line 8) | type ComposeTemplateRepo struct
method Get (line 29) | func (u *ComposeTemplateRepo) Get(opts ...DBOption) (model.ComposeTemp...
method Page (line 39) | func (u *ComposeTemplateRepo) Page(page, size int, opts ...DBOption) (...
method List (line 51) | func (u *ComposeTemplateRepo) List(opts ...DBOption) ([]model.ComposeT...
method Create (line 61) | func (u *ComposeTemplateRepo) Create(compose *model.ComposeTemplate) e...
method Update (line 65) | func (u *ComposeTemplateRepo) Update(id uint, vars map[string]interfac...
method Delete (line 69) | func (u *ComposeTemplateRepo) Delete(opts ...DBOption) error {
method GetRecord (line 77) | func (u *ComposeTemplateRepo) GetRecord(opts ...DBOption) (model.Compo...
method ListRecord (line 87) | func (u *ComposeTemplateRepo) ListRecord() ([]model.Compose, error) {
method CreateRecord (line 95) | func (u *ComposeTemplateRepo) CreateRecord(compose *model.Compose) err...
method DeleteRecord (line 99) | func (u *ComposeTemplateRepo) DeleteRecord(opts ...DBOption) error {
method UpdateRecord (line 106) | func (u *ComposeTemplateRepo) UpdateRecord(name string, vars map[strin...
type IComposeTemplateRepo (line 10) | type IComposeTemplateRepo interface
function NewIComposeTemplateRepo (line 25) | func NewIComposeTemplateRepo() IComposeTemplateRepo {
FILE: agent/app/repo/cronjob.go
type CronjobRepo (line 13) | type CronjobRepo struct
method Get (line 43) | func (u *CronjobRepo) Get(opts ...DBOption) (model.Cronjob, error) {
method GetRecord (line 53) | func (u *CronjobRepo) GetRecord(opts ...DBOption) (model.JobRecords, e...
method List (line 63) | func (u *CronjobRepo) List(opts ...DBOption) ([]model.Cronjob, error) {
method ListRecord (line 73) | func (u *CronjobRepo) ListRecord(opts ...DBOption) ([]model.JobRecords...
method Page (line 83) | func (u *CronjobRepo) Page(page, size int, opts ...DBOption) (int64, [...
method RecordFirst (line 95) | func (u *CronjobRepo) RecordFirst(id uint) (model.JobRecords, error) {
method PageRecords (line 101) | func (u *CronjobRepo) PageRecords(page, size int, opts ...DBOption) (i...
method Create (line 113) | func (u *CronjobRepo) Create(cronjob *model.Cronjob) error {
method WithByJobID (line 117) | func (c *CronjobRepo) WithByJobID(id int) DBOption {
method WithByDbName (line 123) | func (c *CronjobRepo) WithByDbName(name string) DBOption {
method WithByDownloadAccountID (line 129) | func (c *CronjobRepo) WithByDownloadAccountID(id uint) DBOption {
method WithByRecordFile (line 135) | func (c *CronjobRepo) WithByRecordFile(file string) DBOption {
method WithByRecordDropID (line 141) | func (c *CronjobRepo) WithByRecordDropID(id int) DBOption {
method StartRecords (line 147) | func (u *CronjobRepo) StartRecords(cronjobID uint) model.JobRecords {
method EndRecords (line 159) | func (u *CronjobRepo) EndRecords(record model.JobRecords, status, mess...
method AddFailedRecord (line 172) | func (u *CronjobRepo) AddFailedRecord(cronjobID uint, message string) {
method Save (line 183) | func (u *CronjobRepo) Save(id uint, cronjob model.Cronjob) error {
method Update (line 186) | func (u *CronjobRepo) Update(id uint, vars map[string]interface{}) err...
method UpdateRecords (line 190) | func (u *CronjobRepo) UpdateRecords(id uint, vars map[string]interface...
method Delete (line 194) | func (u *CronjobRepo) Delete(opts ...DBOption) error {
method DeleteRecord (line 201) | func (u *CronjobRepo) DeleteRecord(opts ...DBOption) error {
type ICronjobRepo (line 15) | type ICronjobRepo interface
function NewICronjobRepo (line 39) | func NewICronjobRepo() ICronjobRepo {
FILE: agent/app/repo/database.go
type DatabaseRepo (line 14) | type DatabaseRepo struct
method Get (line 32) | func (d *DatabaseRepo) Get(opts ...DBOption) (model.Database, error) {
method Page (line 49) | func (d *DatabaseRepo) Page(page, size int, opts ...DBOption) (int64, ...
method GetList (line 70) | func (d *DatabaseRepo) GetList(opts ...DBOption) ([]model.Database, er...
method WithoutByFrom (line 89) | func (d *DatabaseRepo) WithoutByFrom(from string) DBOption {
method WithTypeList (line 95) | func (d *DatabaseRepo) WithTypeList(dbType string) DBOption {
method WithAppInstallID (line 115) | func (d *DatabaseRepo) WithAppInstallID(appInstallID uint) DBOption {
method Create (line 121) | func (d *DatabaseRepo) Create(ctx context.Context, database *model.Dat...
method Update (line 130) | func (d *DatabaseRepo) Update(id uint, vars map[string]interface{}) er...
method Delete (line 134) | func (d *DatabaseRepo) Delete(ctx context.Context, opts ...DBOption) e...
type IDatabaseRepo (line 16) | type IDatabaseRepo interface
function NewIDatabaseRepo (line 28) | func NewIDatabaseRepo() IDatabaseRepo {
FILE: agent/app/repo/database_mysql.go
type MysqlRepo (line 13) | type MysqlRepo struct
method Get (line 30) | func (u *MysqlRepo) Get(opts ...DBOption) (model.DatabaseMysql, error) {
method List (line 48) | func (u *MysqlRepo) List(opts ...DBOption) ([]model.DatabaseMysql, err...
method Page (line 67) | func (u *MysqlRepo) Page(page, size int, opts ...DBOption) (int64, []m...
method Create (line 88) | func (u *MysqlRepo) Create(ctx context.Context, mysql *model.DatabaseM...
method Delete (line 97) | func (u *MysqlRepo) Delete(ctx context.Context, opts ...DBOption) error {
method DeleteLocal (line 101) | func (u *MysqlRepo) DeleteLocal(ctx context.Context) error {
method Update (line 105) | func (u *MysqlRepo) Update(id uint, vars map[string]interface{}) error {
method WithByMysqlName (line 109) | func (u *MysqlRepo) WithByMysqlName(mysqlName string) DBOption {
type IMysqlRepo (line 15) | type IMysqlRepo interface
function NewIMysqlRepo (line 26) | func NewIMysqlRepo() IMysqlRepo {
FILE: agent/app/repo/database_postgresql.go
type PostgresqlRepo (line 13) | type PostgresqlRepo struct
method Get (line 30) | func (u *PostgresqlRepo) Get(opts ...DBOption) (model.DatabasePostgres...
method List (line 48) | func (u *PostgresqlRepo) List(opts ...DBOption) ([]model.DatabasePostg...
method Page (line 67) | func (u *PostgresqlRepo) Page(page, size int, opts ...DBOption) (int64...
method Create (line 88) | func (u *PostgresqlRepo) Create(ctx context.Context, postgresql *model...
method Delete (line 97) | func (u *PostgresqlRepo) Delete(ctx context.Context, opts ...DBOption)...
method DeleteLocal (line 101) | func (u *PostgresqlRepo) DeleteLocal(ctx context.Context) error {
method Update (line 105) | func (u *PostgresqlRepo) Update(id uint, vars map[string]interface{}) ...
method WithByPostgresqlName (line 109) | func (u *PostgresqlRepo) WithByPostgresqlName(postgresqlName string) D...
type IPostgresqlRepo (line 15) | type IPostgresqlRepo interface
function NewIPostgresqlRepo (line 26) | func NewIPostgresqlRepo() IPostgresqlRepo {
FILE: agent/app/repo/favorite.go
type FavoriteRepo (line 9) | type FavoriteRepo struct
method WithByPath (line 24) | func (f *FavoriteRepo) WithByPath(path string) DBOption {
method Page (line 30) | func (f *FavoriteRepo) Page(page, size int, opts ...DBOption) (int64, ...
method Create (line 42) | func (f *FavoriteRepo) Create(favorite *model.Favorite) error {
method GetFirst (line 46) | func (f *FavoriteRepo) GetFirst(opts ...DBOption) (model.Favorite, err...
method Delete (line 55) | func (f *FavoriteRepo) Delete(opts ...DBOption) error {
method All (line 60) | func (f *FavoriteRepo) All() ([]model.Favorite, error) {
type IFavoriteRepo (line 11) | type IFavoriteRepo interface
function NewIFavoriteRepo (line 20) | func NewIFavoriteRepo() IFavoriteRepo {
FILE: agent/app/repo/ftp.go
type FtpRepo (line 9) | type FtpRepo struct
method Get (line 26) | func (u *FtpRepo) Get(opts ...DBOption) (model.Ftp, error) {
method WithByUser (line 36) | func (h *FtpRepo) WithByUser(user string) DBOption {
method WithLikeUser (line 42) | func (h *FtpRepo) WithLikeUser(user string) DBOption {
method GetList (line 51) | func (u *FtpRepo) GetList(opts ...DBOption) ([]model.Ftp, error) {
method Page (line 61) | func (h *FtpRepo) Page(page, size int, opts ...DBOption) (int64, []mod...
method Create (line 73) | func (h *FtpRepo) Create(ftp *model.Ftp) error {
method Update (line 77) | func (h *FtpRepo) Update(id uint, vars map[string]interface{}) error {
method Delete (line 81) | func (h *FtpRepo) Delete(opts ...DBOption) error {
type IFtpRepo (line 11) | type IFtpRepo interface
function NewIFtpRepo (line 22) | func NewIFtpRepo() IFtpRepo {
FILE: agent/app/repo/group.go
type GroupRepo (line 9) | type GroupRepo struct
method WithByDefault (line 26) | func (g *GroupRepo) WithByDefault(isDefault bool) DBOption {
method Get (line 32) | func (g *GroupRepo) Get(opts ...DBOption) (model.Group, error) {
method GetList (line 42) | func (g *GroupRepo) GetList(opts ...DBOption) ([]model.Group, error) {
method Create (line 52) | func (g *GroupRepo) Create(group *model.Group) error {
method Update (line 56) | func (g *GroupRepo) Update(id uint, vars map[string]interface{}) error {
method Delete (line 60) | func (g *GroupRepo) Delete(opts ...DBOption) error {
method WithByWebsiteDefault (line 68) | func (g *GroupRepo) WithByWebsiteDefault() DBOption {
method CancelDefault (line 74) | func (g *GroupRepo) CancelDefault(groupType string) error {
type IGroupRepo (line 11) | type IGroupRepo interface
function NewIGroupRepo (line 22) | func NewIGroupRepo() IGroupRepo {
FILE: agent/app/repo/host.go
type HostRepo (line 10) | type HostRepo struct
method Get (line 45) | func (h *HostRepo) Get(opts ...DBOption) (model.Host, error) {
method GetList (line 55) | func (h *HostRepo) GetList(opts ...DBOption) ([]model.Host, error) {
method Page (line 65) | func (h *HostRepo) Page(page, size int, opts ...DBOption) (int64, []mo...
method WithByInfo (line 77) | func (h *HostRepo) WithByInfo(info string) DBOption {
method WithByPort (line 87) | func (h *HostRepo) WithByPort(port uint) DBOption {
method WithByUser (line 93) | func (h *HostRepo) WithByUser(user string) DBOption {
method Create (line 99) | func (h *HostRepo) Create(host *model.Host) error {
method Update (line 103) | func (h *HostRepo) Update(id uint, vars map[string]interface{}) error {
method UpdateGroup (line 107) | func (h *HostRepo) UpdateGroup(group, newGroup uint) error {
method Delete (line 111) | func (h *HostRepo) Delete(opts ...DBOption) error {
method GetFirewallRecord (line 119) | func (h *HostRepo) GetFirewallRecord(opts ...DBOption) (model.Firewall...
method ListFirewallRecord (line 129) | func (h *HostRepo) ListFirewallRecord(opts ...DBOption) ([]model.Firew...
method SaveFirewallRecord (line 141) | func (h *HostRepo) SaveFirewallRecord(firewall *model.Firewall) error {
method DeleteFirewallRecordByID (line 171) | func (h *HostRepo) DeleteFirewallRecordByID(id uint) error {
method GetCert (line 175) | func (u *HostRepo) GetCert(opts ...DBOption) (model.RootCert, error) {
method PageCert (line 185) | func (u *HostRepo) PageCert(page, size int, opts ...DBOption) (int64, ...
method ListCert (line 197) | func (u *HostRepo) ListCert(opts ...DBOption) ([]model.RootCert, error) {
method SaveCert (line 209) | func (u *HostRepo) SaveCert(cert *model.RootCert) error {
method UpdateCert (line 213) | func (u *HostRepo) UpdateCert(id uint, vars map[string]interface{}) er...
method DeleteCert (line 217) | func (u *HostRepo) DeleteCert(opts ...DBOption) error {
method SyncCert (line 225) | func (u *HostRepo) SyncCert(data []model.RootCert) error {
method WithByChain (line 254) | func (u *HostRepo) WithByChain(chain string) DBOption {
type IHostRepo (line 12) | type IHostRepo interface
function NewIHostRepo (line 41) | func NewIHostRepo() IHostRepo {
FILE: agent/app/repo/image_repo.go
type ImageRepoRepo (line 8) | type ImageRepoRepo struct
method Get (line 23) | func (u *ImageRepoRepo) Get(opts ...DBOption) (model.ImageRepo, error) {
method Page (line 33) | func (u *ImageRepoRepo) Page(page, size int, opts ...DBOption) (int64,...
method List (line 45) | func (u *ImageRepoRepo) List(opts ...DBOption) ([]model.ImageRepo, err...
method Create (line 57) | func (u *ImageRepoRepo) Create(imageRepo *model.ImageRepo) error {
method Update (line 61) | func (u *ImageRepoRepo) Update(id uint, vars map[string]interface{}) e...
method Delete (line 65) | func (u *ImageRepoRepo) Delete(opts ...DBOption) error {
type IImageRepoRepo (line 10) | type IImageRepoRepo interface
function NewIImageRepoRepo (line 19) | func NewIImageRepoRepo() IImageRepoRepo {
FILE: agent/app/repo/mcp_server.go
type McpServerRepo (line 5) | type McpServerRepo struct
method Page (line 21) | func (m McpServerRepo) Page(page, size int, opts ...DBOption) (int64, ...
method GetFirst (line 30) | func (m McpServerRepo) GetFirst(opts ...DBOption) (*model.McpServer, e...
method List (line 38) | func (m McpServerRepo) List(opts ...DBOption) ([]model.McpServer, erro...
method Create (line 46) | func (m McpServerRepo) Create(mcpServer *model.McpServer) error {
method Save (line 50) | func (m McpServerRepo) Save(mcpServer *model.McpServer) error {
method DeleteBy (line 54) | func (m McpServerRepo) DeleteBy(opts ...DBOption) error {
type IMcpServerRepo (line 8) | type IMcpServerRepo interface
function NewIMcpServerRepo (line 17) | func NewIMcpServerRepo() IMcpServerRepo {
FILE: agent/app/repo/monitor.go
type MonitorRepo (line 11) | type MonitorRepo struct
method GetBase (line 35) | func (u *MonitorRepo) GetBase(opts ...DBOption) ([]model.MonitorBase, ...
method GetIO (line 44) | func (u *MonitorRepo) GetIO(opts ...DBOption) ([]model.MonitorIO, erro...
method GetNetwork (line 53) | func (u *MonitorRepo) GetNetwork(opts ...DBOption) ([]model.MonitorNet...
method GetGPU (line 62) | func (u *MonitorRepo) GetGPU(opts ...DBOption) ([]model.MonitorGPU, er...
method CreateMonitorBase (line 72) | func (u *MonitorRepo) CreateMonitorBase(model model.MonitorBase) error {
method BatchCreateMonitorGPU (line 75) | func (s *MonitorRepo) BatchCreateMonitorGPU(list []model.MonitorGPU) e...
method BatchCreateMonitorIO (line 78) | func (u *MonitorRepo) BatchCreateMonitorIO(ioList []model.MonitorIO) e...
method BatchCreateMonitorNet (line 81) | func (u *MonitorRepo) BatchCreateMonitorNet(ioList []model.MonitorNetw...
method DelMonitorBase (line 84) | func (u *MonitorRepo) DelMonitorBase(timeForDelete time.Time) error {
method DelMonitorIO (line 87) | func (u *MonitorRepo) DelMonitorIO(timeForDelete time.Time) error {
method DelMonitorNet (line 90) | func (u *MonitorRepo) DelMonitorNet(timeForDelete time.Time) error {
method DelMonitorGPU (line 93) | func (s *MonitorRepo) DelMonitorGPU(timeForDelete time.Time) error {
method WithByProductName (line 97) | func (s *MonitorRepo) WithByProductName(name string) DBOption {
type IMonitorRepo (line 13) | type IMonitorRepo interface
function NewIMonitorRepo (line 31) | func NewIMonitorRepo() IMonitorRepo {
FILE: agent/app/repo/php_extensions.go
type PHPExtensionsRepo (line 7) | type PHPExtensionsRepo struct
method Page (line 23) | func (p *PHPExtensionsRepo) Page(page, size int, opts ...DBOption) (in...
method List (line 34) | func (p *PHPExtensionsRepo) List() ([]model.PHPExtensions, error) {
method Save (line 42) | func (p *PHPExtensionsRepo) Save(extension *model.PHPExtensions) error {
method Create (line 46) | func (p *PHPExtensionsRepo) Create(extension *model.PHPExtensions) err...
method GetFirst (line 50) | func (p *PHPExtensionsRepo) GetFirst(opts ...DBOption) (model.PHPExten...
method DeleteBy (line 57) | func (p *PHPExtensionsRepo) DeleteBy(opts ...DBOption) error {
type IPHPExtensionsRepo (line 10) | type IPHPExtensionsRepo interface
function NewIPHPExtensionsRepo (line 19) | func NewIPHPExtensionsRepo() IPHPExtensionsRepo {
FILE: agent/app/repo/runtime.go
type RuntimeRepo (line 12) | type RuntimeRepo struct
method WithStatus (line 35) | func (r *RuntimeRepo) WithStatus(status string) DBOption {
method WithNormalStatus (line 41) | func (r *RuntimeRepo) WithNormalStatus(status string) DBOption {
method WithImage (line 47) | func (r *RuntimeRepo) WithImage(image string) DBOption {
method WithDetailId (line 53) | func (r *RuntimeRepo) WithDetailId(id uint) DBOption {
method WithDetailIdsIn (line 59) | func (r *RuntimeRepo) WithDetailIdsIn(ids []uint) DBOption {
method WithNotId (line 65) | func (r *RuntimeRepo) WithNotId(id uint) DBOption {
method WithPort (line 71) | func (r *RuntimeRepo) WithPort(port int) DBOption {
method Page (line 84) | func (r *RuntimeRepo) Page(page, size int, opts ...DBOption) (int64, [...
method List (line 93) | func (r *RuntimeRepo) List(opts ...DBOption) ([]model.Runtime, error) {
method Create (line 103) | func (r *RuntimeRepo) Create(ctx context.Context, runtime *model.Runti...
method Save (line 108) | func (r *RuntimeRepo) Save(runtime *model.Runtime) error {
method DeleteBy (line 112) | func (r *RuntimeRepo) DeleteBy(opts ...DBOption) error {
method GetFirst (line 116) | func (r *RuntimeRepo) GetFirst(ctx context.Context, opts ...DBOption) ...
type IRuntimeRepo (line 15) | type IRuntimeRepo interface
function NewIRunTimeRepo (line 31) | func NewIRunTimeRepo() IRuntimeRepo {
FILE: agent/app/repo/script.go
type ScriptRepo (line 8) | type ScriptRepo struct
method Get (line 21) | func (u *ScriptRepo) Get(opts ...DBOption) (model.ScriptLibrary, error) {
method List (line 34) | func (u *ScriptRepo) List(opts ...DBOption) ([]model.ScriptLibrary, er...
method SyncAll (line 52) | func (u *ScriptRepo) SyncAll(data []model.ScriptLibrary) error {
type IScriptRepo (line 10) | type IScriptRepo interface
function NewIScriptRepo (line 17) | func NewIScriptRepo() IScriptRepo {
FILE: agent/app/repo/setting.go
type SettingRepo (line 11) | type SettingRepo struct
method GetList (line 35) | func (s *SettingRepo) GetList(opts ...DBOption) ([]model.Setting, erro...
method Create (line 45) | func (s *SettingRepo) Create(key, value string) error {
method Get (line 53) | func (s *SettingRepo) Get(opts ...DBOption) (model.Setting, error) {
method GetValueByKey (line 63) | func (s *SettingRepo) GetValueByKey(key string) (string, error) {
method WithByKey (line 71) | func (s *SettingRepo) WithByKey(key string) DBOption {
method Update (line 77) | func (s *SettingRepo) Update(key, value string) error {
method UpdateOrCreate (line 81) | func (s *SettingRepo) UpdateOrCreate(key, value string) error {
method GetDescriptionList (line 93) | func (s *SettingRepo) GetDescriptionList(opts ...DBOption) ([]model.Co...
method GetDescription (line 102) | func (s *SettingRepo) GetDescription(opts ...DBOption) (model.CommonDe...
method CreateDescription (line 111) | func (s *SettingRepo) CreateDescription(data *model.CommonDescription)...
method UpdateDescription (line 114) | func (s *SettingRepo) UpdateDescription(id string, val map[string]inte...
method DelDescription (line 117) | func (s *SettingRepo) DelDescription(id string) error {
method WithByDescriptionID (line 120) | func (s *SettingRepo) WithByDescriptionID(id string) DBOption {
type ISettingRepo (line 13) | type ISettingRepo interface
function NewISettingRepo (line 31) | func NewISettingRepo() ISettingRepo {
FILE: agent/app/repo/snapshot.go
type ISnapshotRepo (line 8) | type ISnapshotRepo interface
function NewISnapshotRepo (line 17) | func NewISnapshotRepo() ISnapshotRepo {
type SnapshotRepo (line 21) | type SnapshotRepo struct
method Get (line 23) | func (u *SnapshotRepo) Get(opts ...DBOption) (model.Snapshot, error) {
method GetList (line 33) | func (u *SnapshotRepo) GetList(opts ...DBOption) ([]model.Snapshot, er...
method Page (line 43) | func (u *SnapshotRepo) Page(page, size int, opts ...DBOption) (int64, ...
method Create (line 55) | func (u *SnapshotRepo) Create(Snapshot *model.Snapshot) error {
method Update (line 59) | func (u *SnapshotRepo) Update(id uint, vars map[string]interface{}) er...
method Delete (line 63) | func (u *SnapshotRepo) Delete(opts ...DBOption) error {
FILE: agent/app/repo/tag.go
type TagRepo (line 9) | type TagRepo struct
method BatchCreate (line 29) | func (t TagRepo) BatchCreate(ctx context.Context, tags []*model.Tag) e...
method DeleteAll (line 33) | func (t TagRepo) DeleteAll(ctx context.Context) error {
method All (line 37) | func (t TagRepo) All() ([]model.Tag, error) {
method GetByKey (line 45) | func (t TagRepo) GetByKey(key string) (*model.Tag, error) {
method GetByIds (line 53) | func (t TagRepo) GetByIds(ids []uint) ([]model.Tag, error) {
method GetByKeys (line 61) | func (t TagRepo) GetByKeys(keys []string) ([]model.Tag, error) {
method GetByAppId (line 69) | func (t TagRepo) GetByAppId(appId uint) ([]model.Tag, error) {
method DeleteByID (line 77) | func (t TagRepo) DeleteByID(ctx context.Context, id uint) error {
method Create (line 81) | func (t TagRepo) Create(ctx context.Context, tag *model.Tag) error {
method Save (line 85) | func (t TagRepo) Save(ctx context.Context, tag *model.Tag) error {
type ITagRepo (line 12) | type ITagRepo interface
function NewITagRepo (line 25) | func NewITagRepo() ITagRepo {
FILE: agent/app/repo/task.go
type TaskRepo (line 13) | type TaskRepo struct
method WithByID (line 56) | func (t TaskRepo) WithByID(id string) DBOption {
method WithByIDNotIn (line 62) | func (t TaskRepo) WithByIDNotIn(ids []string) DBOption {
method WithOperate (line 68) | func (t TaskRepo) WithOperate(taskOperate string) DBOption {
method WithResourceID (line 74) | func (t TaskRepo) WithResourceID(id uint) DBOption {
method WithByStatus (line 80) | func (t TaskRepo) WithByStatus(status string) DBOption {
method Save (line 86) | func (t TaskRepo) Save(ctx context.Context, task *model.Task) error {
method GetFirst (line 90) | func (t TaskRepo) GetFirst(opts ...DBOption) (model.Task, error) {
method Page (line 99) | func (t TaskRepo) Page(page, size int, opts ...DBOption) (int64, []mod...
method Update (line 108) | func (t TaskRepo) Update(ctx context.Context, task *model.Task) error {
method UpdateRunningTaskToFailed (line 112) | func (t TaskRepo) UpdateRunningTaskToFailed() error {
method CountExecutingTask (line 116) | func (t TaskRepo) CountExecutingTask() (int64, error) {
method Delete (line 122) | func (t TaskRepo) Delete(opts ...DBOption) error {
method DeleteAll (line 130) | func (t TaskRepo) DeleteAll() error {
type ITaskRepo (line 16) | type ITaskRepo interface
function NewITaskRepo (line 33) | func NewITaskRepo() ITaskRepo {
function getTaskDb (line 37) | func getTaskDb(opts ...DBOption) *gorm.DB {
function getTaskTx (line 45) | func getTaskTx(ctx context.Context, opts ...DBOption) *gorm.DB {
FILE: agent/app/repo/tensorrt_llm.go
type TensorRTLLMRepo (line 5) | type TensorRTLLMRepo struct
method Page (line 21) | func (t TensorRTLLMRepo) Page(page, size int, opts ...DBOption) (int64...
method GetFirst (line 30) | func (t TensorRTLLMRepo) GetFirst(opts ...DBOption) (*model.TensorRTLL...
method List (line 38) | func (t TensorRTLLMRepo) List(opts ...DBOption) ([]model.TensorRTLLM, ...
method Create (line 46) | func (t TensorRTLLMRepo) Create(tensorrtLLM *model.TensorRTLLM) error {
method Save (line 50) | func (t TensorRTLLMRepo) Save(tensorrtLLM *model.TensorRTLLM) error {
method DeleteBy (line 54) | func (t TensorRTLLMRepo) DeleteBy(opts ...DBOption) error {
type ITensorRTLLMRepo (line 8) | type ITensorRTLLMRepo interface
function NewITensorRTLLMRepo (line 17) | func NewITensorRTLLMRepo() ITensorRTLLMRepo {
FILE: agent/app/repo/website.go
type IWebsiteRepo (line 11) | type IWebsiteRepo interface
function NewIWebsiteRepo (line 38) | func NewIWebsiteRepo() IWebsiteRepo {
type WebsiteRepo (line 42) | type WebsiteRepo struct
method WithAppInstallId (line 45) | func (w *WebsiteRepo) WithAppInstallId(appInstallID uint) DBOption {
method WithRuntimeID (line 51) | func (w *WebsiteRepo) WithRuntimeID(runtimeID uint) DBOption {
method WithDomain (line 57) | func (w *WebsiteRepo) WithDomain(domain string) DBOption {
method WithDomainLike (line 63) | func (w *WebsiteRepo) WithDomainLike(domain string) DBOption {
method WithAlias (line 69) | func (w *WebsiteRepo) WithAlias(alias string) DBOption {
method WithWebsiteSSLID (line 75) | func (w *WebsiteRepo) WithWebsiteSSLID(sslId uint) DBOption {
method WithParentID (line 81) | func (w *WebsiteRepo) WithParentID(websiteID uint) DBOption {
method WithGroupID (line 87) | func (w *WebsiteRepo) WithGroupID(groupId uint) DBOption {
method WithDefaultServer (line 93) | func (w *WebsiteRepo) WithDefaultServer() DBOption {
method WithType (line 99) | func (w *WebsiteRepo) WithType(websiteType string) DBOption {
method WithDBType (line 105) | func (w *WebsiteRepo) WithDBType(dbType string) DBOption {
method WithDBID (line 111) | func (w *WebsiteRepo) WithDBID(dbID uint) DBOption {
method Page (line 117) | func (w *WebsiteRepo) Page(page, size int, opts ...DBOption) (int64, [...
method List (line 126) | func (w *WebsiteRepo) List(opts ...DBOption) ([]model.Website, error) {
method GetFirst (line 132) | func (w *WebsiteRepo) GetFirst(opts ...DBOption) (model.Website, error) {
method GetBy (line 141) | func (w *WebsiteRepo) GetBy(opts ...DBOption) ([]model.Website, error) {
method Create (line 150) | func (w *WebsiteRepo) Create(ctx context.Context, app *model.Website) ...
method Save (line 154) | func (w *WebsiteRepo) Save(ctx context.Context, app *model.Website) er...
method SaveWithoutCtx (line 158) | func (w *WebsiteRepo) SaveWithoutCtx(website *model.Website) error {
method DeleteBy (line 162) | func (w *WebsiteRepo) DeleteBy(ctx context.Context, opts ...DBOption) ...
method DeleteAll (line 166) | func (w *WebsiteRepo) DeleteAll(ctx context.Context) error {
method UpdateGroup (line 170) | func (w *WebsiteRepo) UpdateGroup(group, newGroup uint) error {
FILE: agent/app/repo/website_acme_account.go
type IAcmeAccountRepo (line 8) | type IAcmeAccountRepo interface
function NewIAcmeAccountRepo (line 18) | func NewIAcmeAccountRepo() IAcmeAccountRepo {
type WebsiteAcmeAccountRepo (line 22) | type WebsiteAcmeAccountRepo struct
method WithEmail (line 25) | func (w *WebsiteAcmeAccountRepo) WithEmail(email string) DBOption {
method WithType (line 30) | func (w *WebsiteAcmeAccountRepo) WithType(acType string) DBOption {
method Page (line 36) | func (w *WebsiteAcmeAccountRepo) Page(page, size int, opts ...DBOption...
method GetFirst (line 45) | func (w *WebsiteAcmeAccountRepo) GetFirst(opts ...DBOption) (*model.We...
method Create (line 54) | func (w *WebsiteAcmeAccountRepo) Create(account model.WebsiteAcmeAccou...
method Save (line 58) | func (w *WebsiteAcmeAccountRepo) Save(account model.WebsiteAcmeAccount...
method DeleteBy (line 62) | func (w *WebsiteAcmeAccountRepo) DeleteBy(opts ...DBOption) error {
FILE: agent/app/repo/website_ca.go
type WebsiteCARepo (line 9) | type WebsiteCARepo struct
method Page (line 24) | func (w WebsiteCARepo) Page(page, size int, opts ...DBOption) (int64, ...
method GetFirst (line 33) | func (w WebsiteCARepo) GetFirst(opts ...DBOption) (model.WebsiteCA, er...
method List (line 42) | func (w WebsiteCARepo) List(opts ...DBOption) ([]model.WebsiteCA, erro...
method Create (line 49) | func (w WebsiteCARepo) Create(ctx context.Context, ca *model.WebsiteCA...
method DeleteBy (line 53) | func (w WebsiteCARepo) DeleteBy(opts ...DBOption) error {
function NewIWebsiteCARepo (line 12) | func NewIWebsiteCARepo() IWebsiteCARepo {
type IWebsiteCARepo (line 16) | type IWebsiteCARepo interface
FILE: agent/app/repo/website_dns_account.go
type WebsiteDnsAccountRepo (line 7) | type WebsiteDnsAccountRepo struct
method Page (line 23) | func (w WebsiteDnsAccountRepo) Page(page, size int, opts ...DBOption) ...
method GetFirst (line 32) | func (w WebsiteDnsAccountRepo) GetFirst(opts ...DBOption) (*model.Webs...
method List (line 41) | func (w WebsiteDnsAccountRepo) List(opts ...DBOption) ([]model.Website...
method Create (line 50) | func (w WebsiteDnsAccountRepo) Create(account model.WebsiteDnsAccount)...
method Save (line 54) | func (w WebsiteDnsAccountRepo) Save(account model.WebsiteDnsAccount) e...
method DeleteBy (line 58) | func (w WebsiteDnsAccountRepo) DeleteBy(opts ...DBOption) error {
type IWebsiteDnsAccountRepo (line 10) | type IWebsiteDnsAccountRepo interface
function NewIWebsiteDnsAccountRepo (line 19) | func NewIWebsiteDnsAccountRepo() IWebsiteDnsAccountRepo {
FILE: agent/app/repo/website_domain.go
type WebsiteDomainRepo (line 11) | type WebsiteDomainRepo struct
method WithWebsiteId (line 33) | func (w WebsiteDomainRepo) WithWebsiteId(websiteId uint) DBOption {
method WithPort (line 39) | func (w WebsiteDomainRepo) WithPort(port int) DBOption {
method WithDomain (line 44) | func (w WebsiteDomainRepo) WithDomain(domain string) DBOption {
method WithDomainLike (line 49) | func (w WebsiteDomainRepo) WithDomainLike(domain string) DBOption {
method Page (line 54) | func (w WebsiteDomainRepo) Page(page, size int, opts ...DBOption) (int...
method GetFirst (line 63) | func (w WebsiteDomainRepo) GetFirst(opts ...DBOption) (model.WebsiteDo...
method GetBy (line 72) | func (w WebsiteDomainRepo) GetBy(opts ...DBOption) ([]model.WebsiteDom...
method BatchCreate (line 81) | func (w WebsiteDomainRepo) BatchCreate(ctx context.Context, domains []...
method Create (line 85) | func (w WebsiteDomainRepo) Create(ctx context.Context, app *model.Webs...
method Save (line 89) | func (w WebsiteDomainRepo) Save(ctx context.Context, app *model.Websit...
method DeleteBy (line 93) | func (w WebsiteDomainRepo) DeleteBy(ctx context.Context, opts ...DBOpt...
method DeleteAll (line 97) | func (w WebsiteDomainRepo) DeleteAll(ctx context.Context) error {
type IWebsiteDomainRepo (line 14) | type IWebsiteDomainRepo interface
function NewIWebsiteDomainRepo (line 29) | func NewIWebsiteDomainRepo() IWebsiteDomainRepo {
FILE: agent/app/repo/website_ssl.go
function NewISSLRepo (line 10) | func NewISSLRepo() ISSLRepo {
type ISSLRepo (line 14) | type ISSLRepo interface
type WebsiteSSLRepo (line 30) | type WebsiteSSLRepo struct
method WithByAlias (line 33) | func (w WebsiteSSLRepo) WithByAlias(alias string) DBOption {
method WithByAcmeAccountId (line 39) | func (w WebsiteSSLRepo) WithByAcmeAccountId(acmeAccountId uint) DBOpti...
method WithByDnsAccountId (line 45) | func (w WebsiteSSLRepo) WithByDnsAccountId(dnsAccountId uint) DBOption {
method WithByCAID (line 51) | func (w WebsiteSSLRepo) WithByCAID(caID uint) DBOption {
method WithByDomain (line 57) | func (w WebsiteSSLRepo) WithByDomain(domain string) DBOption {
method WithByMasterSSLID (line 63) | func (w WebsiteSSLRepo) WithByMasterSSLID(sslID uint) DBOption {
method Page (line 69) | func (w WebsiteSSLRepo) Page(page, size int, opts ...DBOption) (int64,...
method GetFirst (line 78) | func (w WebsiteSSLRepo) GetFirst(opts ...DBOption) (*model.WebsiteSSL,...
method List (line 87) | func (w WebsiteSSLRepo) List(opts ...DBOption) ([]model.WebsiteSSL, er...
method Create (line 96) | func (w WebsiteSSLRepo) Create(ctx context.Context, ssl *model.Website...
method Save (line 100) | func (w WebsiteSSLRepo) Save(ssl *model.WebsiteSSL) error {
method SaveByMap (line 106) | func (w WebsiteSSLRepo) SaveByMap(ssl *model.WebsiteSSL, params map[st...
method DeleteBy (line 112) | func (w WebsiteSSLRepo) DeleteBy(opts ...DBOption) error {
FILE: agent/app/service/agents.go
type IAgentService (line 25) | type IAgentService interface
constant defaultBrowserExecutablePath (line 64) | defaultBrowserExecutablePath = "/home/node/.cache/ms-playwright/chromiu...
constant defaultBrowserProfile (line 65) | defaultBrowserProfile = "openclaw"
constant defaultUserTimezone (line 66) | defaultUserTimezone = "Asia/Shanghai"
constant defaultToolsProfile (line 67) | defaultToolsProfile = "full"
constant defaultToolsSessionVisibility (line 68) | defaultToolsSessionVisibility = "all"
constant maxCommunityAIAgents (line 69) | maxCommunityAIAgents = int64(5)
constant openclawPluginBaseDir (line 70) | openclawPluginBaseDir = "/home/node/.openclaw/extensions"
constant openclawGatewayPort (line 71) | openclawGatewayPort = 18789
constant openclawAllowedOriginHost (line 72) | openclawAllowedOriginHost = "127.0.0.1"
constant openclawHTTPSVersion (line 73) | openclawHTTPSVersion = "2026.3.13"
constant openclawTrustedProxyLoopback (line 74) | openclawTrustedProxyLoopback = "127.0.0.1/32"
method Create (line 77) | func (a AgentService) Create(req dto.AgentCreateReq) (*dto.AgentItem, er...
method Page (line 240) | func (a AgentService) Page(req dto.SearchWithPage) (int64, []dto.AgentIt...
method Delete (line 260) | func (a AgentService) Delete(req dto.AgentDeleteReq) error {
method ResetToken (line 280) | func (a AgentService) ResetToken(req dto.AgentTokenResetReq) error {
method UpdateModelConfig (line 309) | func (a AgentService) UpdateModelConfig(req dto.AgentModelConfigUpdateRe...
method GetProviders (line 342) | func (a AgentService) GetProviders() ([]dto.ProviderInfo, error) {
method CreateAccount (line 360) | func (a AgentService) CreateAccount(req dto.AgentAccountCreateReq) error {
method UpdateAccount (line 398) | func (a AgentService) UpdateAccount(req dto.AgentAccountUpdateReq) error {
method PageAccounts (line 427) | func (a AgentService) PageAccounts(req dto.AgentAccountSearch) (int64, [...
method GetAccountModels (line 470) | func (a AgentService) GetAccountModels(req dto.AgentAccountModelReq) ([]...
method CreateAccountModel (line 478) | func (a AgentService) CreateAccountModel(req dto.AgentAccountModelCreate...
method UpdateAccountModel (line 515) | func (a AgentService) UpdateAccountModel(req dto.AgentAccountModelUpdate...
method DeleteAccountModel (line 567) | func (a AgentService) DeleteAccountModel(req dto.AgentAccountModelDelete...
method SyncAgentsByAccount (line 598) | func (a AgentService) SyncAgentsByAccount(account *model.AgentAccount) e...
method VerifyAccount (line 605) | func (a AgentService) VerifyAccount(req dto.AgentAccountVerifyReq) error {
method DeleteAccount (line 613) | func (a AgentService) DeleteAccount(req dto.AgentAccountDeleteReq) error {
method GetFeishuConfig (line 623) | func (a AgentService) GetFeishuConfig(req dto.AgentFeishuConfigReq) (*dt...
method UpdateFeishuConfig (line 632) | func (a AgentService) UpdateFeishuConfig(req dto.AgentFeishuConfigUpdate...
method GetTelegramConfig (line 646) | func (a AgentService) GetTelegramConfig(req dto.AgentTelegramConfigReq) ...
method UpdateTelegramConfig (line 655) | func (a AgentService) UpdateTelegramConfig(req dto.AgentTelegramConfigUp...
method GetDiscordConfig (line 667) | func (a AgentService) GetDiscordConfig(req dto.AgentDiscordConfigReq) (*...
method UpdateDiscordConfig (line 676) | func (a AgentService) UpdateDiscordConfig(req dto.AgentDiscordConfigUpda...
method GetQQBotConfig (line 689) | func (a AgentService) GetQQBotConfig(req dto.AgentQQBotConfigReq) (*dto....
method UpdateQQBotConfig (line 700) | func (a AgentService) UpdateQQBotConfig(req dto.AgentQQBotConfigUpdateRe...
method GetWecomConfig (line 711) | func (a AgentService) GetWecomConfig(req dto.AgentWecomConfigReq) (*dto....
method UpdateWecomConfig (line 722) | func (a AgentService) UpdateWecomConfig(req dto.AgentWecomConfigUpdateRe...
method GetDingTalkConfig (line 734) | func (a AgentService) GetDingTalkConfig(req dto.AgentDingTalkConfigReq) ...
method UpdateDingTalkConfig (line 745) | func (a AgentService) UpdateDingTalkConfig(req dto.AgentDingTalkConfigUp...
method InstallPlugin (line 760) | func (a AgentService) InstallPlugin(req dto.AgentPluginInstallReq) error {
method CheckPlugin (line 785) | func (a AgentService) CheckPlugin(req dto.AgentPluginCheckReq) (*dto.Age...
method GetSecurityConfig (line 797) | func (a AgentService) GetSecurityConfig(req dto.AgentSecurityConfigReq) ...
method UpdateSecurityConfig (line 813) | func (a AgentService) UpdateSecurityConfig(req dto.AgentSecurityConfigUp...
method GetOtherConfig (line 842) | func (a AgentService) GetOtherConfig(req dto.AgentOtherConfigReq) (*dto....
method UpdateOtherConfig (line 855) | func (a AgentService) UpdateOtherConfig(req dto.AgentOtherConfigUpdateRe...
method ApproveChannelPairing (line 874) | func (a AgentService) ApproveChannelPairing(req dto.AgentChannelPairingA...
method loadAgentAndInstall (line 891) | func (a AgentService) loadAgentAndInstall(agentID uint) (*model.Agent, *...
method loadAgentConfig (line 906) | func (a AgentService) loadAgentConfig(agentID uint) (*model.Agent, *mode...
method mutateAgentConfig (line 918) | func (a AgentService) mutateAgentConfig(agentID uint, fn func(agent *mod...
method syncAgentsByAccount (line 929) | func (a AgentService) syncAgentsByAccount(account *model.AgentAccount) e...
FILE: agent/app/service/agents_utils.go
type AgentService (line 30) | type AgentService struct
function NewIAgentService (line 32) | func NewIAgentService() IAgentService {
type resolvedAgentAccountVerification (line 36) | type resolvedAgentAccountVerification struct
type resolvedAgentAccountInput (line 42) | type resolvedAgentAccountInput struct
function resolveAgentAccountVerification (line 49) | func resolveAgentAccountVerification(provider, apiKey, baseURL string) (...
function verifyResolvedAgentAccount (line 76) | func verifyResolvedAgentAccount(input resolvedAgentAccountVerification) ...
function resolveAgentAccountAPIType (line 83) | func resolveAgentAccountAPIType(provider, apiType, fallbackAPIType strin...
function resolveAgentAccountInput (line 110) | func resolveAgentAccountInput(provider, apiKey, baseURL, apiType, fallba...
function readOpenclawConfig (line 130) | func readOpenclawConfig(configPath string) (map[string]interface{}, erro...
function writeOpenclawConfigRaw (line 146) | func writeOpenclawConfigRaw(configPath string, conf map[string]interface...
function normalizeAllowedOrigins (line 157) | func normalizeAllowedOrigins(origins []string) ([]string, error) {
function normalizeAllowedOrigin (line 181) | func normalizeAllowedOrigin(origin string) (string, error) {
function extractSecurityConfig (line 209) | func extractSecurityConfig(conf map[string]interface{}) dto.AgentSecurit...
function setSecurityConfig (line 236) | func setSecurityConfig(conf map[string]interface{}, config dto.AgentSecu...
function ensureGatewaySecurityDefaults (line 248) | func ensureGatewaySecurityDefaults(conf map[string]interface{}) {
function ensureOpenclawUpdateDefaults (line 258) | func ensureOpenclawUpdateDefaults(conf map[string]interface{}) {
function setTrustedProxies (line 265) | func setTrustedProxies(gateway map[string]interface{}) {
function extractFeishuConfig (line 300) | func extractFeishuConfig(conf map[string]interface{}) dto.AgentFeishuCon...
function setFeishuConfig (line 336) | func setFeishuConfig(conf map[string]interface{}, config dto.AgentFeishu...
function setFeishuPluginEnabled (line 353) | func setFeishuPluginEnabled(conf map[string]interface{}, enabled bool) {
function extractTelegramConfig (line 360) | func extractTelegramConfig(conf map[string]interface{}) dto.AgentTelegra...
function setTelegramConfig (line 385) | func setTelegramConfig(conf map[string]interface{}, config dto.AgentTele...
function extractDiscordConfig (line 401) | func extractDiscordConfig(conf map[string]interface{}) dto.AgentDiscordC...
function setDiscordConfig (line 437) | func setDiscordConfig(conf map[string]interface{}, config dto.AgentDisco...
function extractBrowserConfig (line 457) | func extractBrowserConfig(conf map[string]interface{}) browserConfig {
function setBrowserConfig (line 487) | func setBrowserConfig(conf map[string]interface{}, config browserConfig) {
function extractQQBotConfig (line 500) | func extractQQBotConfig(conf map[string]interface{}) dto.AgentQQBotConfig {
function extractWecomConfig (line 522) | func extractWecomConfig(conf map[string]interface{}) dto.AgentWecomConfig {
function extractDingTalkConfig (line 547) | func extractDingTalkConfig(conf map[string]interface{}) dto.AgentDingTal...
function setWecomConfig (line 583) | func setWecomConfig(conf map[string]interface{}, config dto.AgentWecomCo...
function setDingTalkConfig (line 602) | func setDingTalkConfig(conf map[string]interface{}, config dto.AgentDing...
function setQQBotConfig (line 640) | func setQQBotConfig(conf map[string]interface{}, config dto.AgentQQBotCo...
function resolvePluginMeta (line 654) | func resolvePluginMeta(pluginType string) (string, string, error) {
function checkPluginInstalled (line 667) | func checkPluginInstalled(containerName, pluginType string) (bool, error) {
function extractOtherConfig (line 683) | func extractOtherConfig(conf map[string]interface{}) dto.AgentOtherConfig {
function setOtherConfig (line 705) | func setOtherConfig(conf map[string]interface{}, config dto.AgentOtherCo...
function buildAgentItem (line 722) | func buildAgentItem(agent *model.Agent, appInstall *model.AppInstall, en...
function isOpenclawHTTPSVersion (line 771) | func isOpenclawHTTPSVersion(version string) bool {
function shouldMigrateOpenclawHTTPSUpgrade (line 782) | func shouldMigrateOpenclawHTTPSUpgrade(install *model.AppInstall, fromVe...
function migrateOpenclawHTTPSUpgrade (line 789) | func migrateOpenclawHTTPSUpgrade(install *model.AppInstall, fromVersion,...
function migrateOpenclawHTTPSUpgradeWithSystemIP (line 794) | func migrateOpenclawHTTPSUpgradeWithSystemIP(install *model.AppInstall, ...
function migrateOpenclawInstallPorts (line 828) | func migrateOpenclawInstallPorts(install *model.AppInstall) {
function migrateOpenclawInstallEnv (line 840) | func migrateOpenclawInstallEnv(install *model.AppInstall, allowedOrigins...
function syncOpenclawAllowedOriginEnv (line 865) | func syncOpenclawAllowedOriginEnv(install *model.AppInstall, allowedOrig...
function firstAllowedOrigin (line 888) | func firstAllowedOrigin(allowedOrigins []string) string {
function buildOpenclawAllowedOrigin (line 898) | func buildOpenclawAllowedOrigin(host string, port int) (string, error) {
function checkAgentUpgradable (line 909) | func checkAgentUpgradable(install model.AppInstall) bool {
type openclawConfig (line 942) | type openclawConfig struct
type toolsConfig (line 951) | type toolsConfig struct
type toolSessionsConfig (line 956) | type toolSessionsConfig struct
type updateConfig (line 960) | type updateConfig struct
type gatewayConfig (line 964) | type gatewayConfig struct
type gatewayControlUi (line 973) | type gatewayControlUi struct
type gatewayAuth (line 978) | type gatewayAuth struct
type agentsConfig (line 983) | type agentsConfig struct
type agentDefaults (line 987) | type agentDefaults struct
type modelRef (line 993) | type modelRef struct
type modelsConfig (line 997) | type modelsConfig struct
type modelProvider (line 1002) | type modelProvider struct
type modelEntry (line 1009) | type modelEntry struct
type modelCost (line 1019) | type modelCost struct
type browserConfig (line 1026) | type browserConfig struct
function writeOpenclawConfig (line 1034) | func writeOpenclawConfig(confDir string, account *model.AgentAccount, mo...
function prepareOpenclawInstallFiles (line 1180) | func prepareOpenclawInstallFiles(appInstall *model.AppInstall, account *...
function buildOpenclawModelsFromAccount (line 1192) | func buildOpenclawModelsFromAccount(account *model.AgentAccount, selecte...
function buildOpenclawCatalogModel (line 1247) | func buildOpenclawCatalogModel(account *model.AgentAccount, model dto.Ag...
type openclawAccountModelRuntime (line 1268) | type openclawAccountModelRuntime struct
function buildOpenclawAccountModelRuntime (line 1276) | func buildOpenclawAccountModelRuntime(account *model.AgentAccount, model...
function resolveOpenclawAccountModelRuntimeByID (line 1296) | func resolveOpenclawAccountModelRuntimeByID(account *model.AgentAccount,...
function inferOpenclawCatalogModel (line 1308) | func inferOpenclawCatalogModel(account *model.AgentAccount, modelID stri...
function resolveAccountBaseURL (line 1335) | func resolveAccountBaseURL(account *model.AgentAccount) string {
function buildInitialAgentAccountModels (line 1345) | func buildInitialAgentAccountModels(account *model.AgentAccount, request...
function compactPersistedAgentAccountModelSortOrder (line 1384) | func compactPersistedAgentAccountModelSortOrder(accountID uint) error {
function loadAgentAccountModels (line 1402) | func loadAgentAccountModels(account *model.AgentAccount) ([]dto.AgentAcc...
function MergeCatalogAgentAccountModelsForMigration (line 1409) | func MergeCatalogAgentAccountModelsForMigration(account *model.AgentAcco...
function listPersistedAgentAccountModels (line 1448) | func listPersistedAgentAccountModels(accountID uint) ([]dto.AgentAccount...
function replacePersistedAgentAccountModelsWithTx (line 1475) | func replacePersistedAgentAccountModelsWithTx(tx *gorm.DB, accountID uin...
function replacePersistedAgentAccountModels (line 1501) | func replacePersistedAgentAccountModels(accountID uint, models []dto.Age...
function normalizeAgentAccountModels (line 1507) | func normalizeAgentAccountModels(account *model.AgentAccount, models []d...
function normalizeAgentAccountModel (line 1556) | func normalizeAgentAccountModel(account *model.AgentAccount, model dto.A...
function normalizeAgentAccountModelID (line 1595) | func normalizeAgentAccountModelID(provider, primaryModel, requestedID st...
function buildLegacyAgentAccountModels (line 1654) | func buildLegacyAgentAccountModels(account *model.AgentAccount) []dto.Ag...
function sanitizeAgentAccountModelInputs (line 1687) | func sanitizeAgentAccountModelInputs(values []string) []string {
function requiresInitialAgentAccountModels (line 1707) | func requiresInitialAgentAccountModels(provider string) bool {
function normalizeComparableProviderModelID (line 1716) | func normalizeComparableProviderModelID(provider, modelID string) string {
function sameProviderModelID (line 1738) | func sameProviderModelID(provider, left, right string) bool {
function findAgentAccountModelForProvider (line 1749) | func findAgentAccountModelForProvider(provider string, models []dto.Agen...
function requireAgentAccountModelForProvider (line 1758) | func requireAgentAccountModelForProvider(provider string, models []dto.A...
function ensureAccountModelsNotBound (line 1766) | func ensureAccountModelsNotBound(account *model.AgentAccount, models []d...
function resolveServerTimezone (line 1785) | func resolveServerTimezone() string {
function extractStringList (line 1796) | func extractStringList(value interface{}) []string {
function extractGatewayToken (line 1823) | func extractGatewayToken(conf map[string]interface{}) string {
function ensureChildMap (line 1836) | func ensureChildMap(parent map[string]interface{}, key string) map[strin...
function structToMap (line 1845) | func structToMap(value interface{}) (map[string]interface{}, error) {
function mapToModelsConfig (line 1857) | func mapToModelsConfig(value map[string]interface{}) (*modelsConfig, err...
function providerEnvKey (line 1869) | func providerEnvKey(provider string) string {
type providerDefinition (line 1873) | type providerDefinition struct
function providerDefinitions (line 1880) | func providerDefinitions() map[string]providerDefinition {
function providerDefaultBaseURL (line 1904) | func providerDefaultBaseURL(provider string) (string, bool) {
function fixedProviderBaseURL (line 1908) | func fixedProviderBaseURL(provider string) (string, bool) {
function providerDisplayName (line 1919) | func providerDisplayName(provider string) string {
function readInstallEnv (line 1923) | func readInstallEnv(envStr string) map[string]interface{} {
function maskKey (line 1934) | func maskKey(value string) string {
function toInt (line 1942) | func toInt(value interface{}) int {
function normalizeCustomModel (line 1961) | func normalizeCustomModel(modelName string) string {
function normalizeAgentType (line 1972) | func normalizeAgentType(agentType string) string {
function modelMatchesProvider (line 1980) | func modelMatchesProvider(provider, modelName string) bool {
function runtimeProviderModelPrefix (line 1990) | func runtimeProviderModelPrefix(provider string) string {
function poolModelPrefix (line 2003) | func poolModelPrefix(provider string) string {
function supportedProviderModelPrefixes (line 2014) | func supportedProviderModelPrefixes(provider string) []string {
function normalizeAPIType (line 2032) | func normalizeAPIType(apiType string) string {
function isSupportedAPIType (line 2040) | func isSupportedAPIType(apiType string) bool {
function isSupportedOllamaAPIType (line 2049) | func isSupportedOllamaAPIType(apiType string) bool {
function resolveRuntimeParams (line 2058) | func resolveRuntimeParams(provider, apiType string, maxTokens, contextWi...
function generateToken (line 2098) | func generateToken() string {
function asyncReportAIProviderInstall (line 2106) | func asyncReportAIProviderInstall(provider string) {
FILE: agent/app/service/ai.go
type AIToolService (line 25) | type AIToolService struct
method Search (line 44) | func (u *AIToolService) Search(req dto.SearchWithPage) (int64, []dto.O...
method LoadDetail (line 68) | func (u *AIToolService) LoadDetail(name string) (string, error) {
method Create (line 83) | func (u *AIToolService) Create(req dto.OllamaModelName) error {
method Close (line 129) | func (u *AIToolService) Close(name string) error {
method Recreate (line 143) | func (u *AIToolService) Recreate(req dto.OllamaModelName) error {
method Delete (line 184) | func (u *AIToolService) Delete(req dto.ForceDelete) error {
method Sync (line 206) | func (u *AIToolService) Sync() ([]dto.OllamaModelDropList, error) {
method BindDomain (line 254) | func (u *AIToolService) BindDomain(req dto.OllamaBindDomain) error {
method GetBindDomain (line 301) | func (u *AIToolService) GetBindDomain(req dto.OllamaBindDomainReq) (*d...
method UpdateBindDomain (line 323) | func (u *AIToolService) UpdateBindDomain(req dto.OllamaBindDomain) err...
type IAIToolService (line 27) | type IAIToolService interface
function NewIAIToolService (line 40) | func NewIAIToolService() IAIToolService {
function LoadContainerName (line 371) | func LoadContainerName() (string, error) {
function loadModelSize (line 382) | func loadModelSize(name string, containerName string) (string, error) {
FILE: agent/app/service/alert.go
type AlertService (line 25) | type AlertService struct
method PageAlert (line 53) | func (a AlertService) PageAlert(search dto.AlertSearch) (int64, []dto....
method GetAlerts (line 92) | func (a AlertService) GetAlerts() ([]dto.AlertDTO, error) {
method CreateAlert (line 123) | func (a AlertService) CreateAlert(create dto.AlertCreate) error {
method UpdateAlert (line 159) | func (a AlertService) UpdateAlert(req dto.AlertUpdate) error {
method DeleteAlert (line 180) | func (a AlertService) DeleteAlert(id uint) error {
method GetAlert (line 201) | func (a AlertService) GetAlert(id uint) (dto.AlertDTO, error) {
method UpdateStatus (line 211) | func (a AlertService) UpdateStatus(id uint, status string) error {
method GetDisks (line 232) | func (a AlertService) GetDisks() ([]dto.DiskDTO, error) {
method PageAlertLogs (line 336) | func (a AlertService) PageAlertLogs(search dto.AlertLogSearch) (int64,...
method parseAlertLog (line 365) | func (a AlertService) parseAlertLog(item model.AlertLog) (dto.AlertLog...
method CleanAlertLogs (line 397) | func (a AlertService) CleanAlertLogs() error {
method GetClams (line 401) | func (a AlertService) GetClams() ([]dto.ClamDTO, error) {
method GetCronJobs (line 418) | func (a AlertService) GetCronJobs(req dto.CronJobReq) ([]dto.CronJobDT...
method GetAlertConfig (line 444) | func (a AlertService) GetAlertConfig() ([]model.AlertConfig, error) {
method UpdateAlertConfig (line 454) | func (a AlertService) UpdateAlertConfig(req dto.AlertConfigUpdate) err...
method DeleteAlertConfig (line 478) | func (a AlertService) DeleteAlertConfig(id uint) error {
method TestAlertConfig (line 482) | func (a AlertService) TestAlertConfig(req dto.AlertConfigTest) (bool, ...
method ExternalUpdateAlert (line 511) | func (a AlertService) ExternalUpdateAlert(updateAlert dto.AlertCreate)...
type IAlertService (line 27) | type IAlertService interface
function NewIAlertService (line 49) | func NewIAlertService() IAlertService {
function executeDiskCommand (line 309) | func executeDiskCommand() (string, error) {
function shouldExclude (line 319) | func shouldExclude(fields []string, mountPoint string, excludes map[stri...
function unmarshalAlertInfo (line 390) | func unmarshalAlertInfo(data string, v interface{}) error {
FILE: agent/app/service/alert_helper.go
constant ResourceAlertInterval (line 30) | ResourceAlertInterval = 30
constant CheckIntervalSec (line 31) | CheckIntervalSec = 3
constant LoadCheckIntervalMin (line 32) | LoadCheckIntervalMin = 5
type AlertTaskHelper (line 35) | type AlertTaskHelper struct
method StartTask (line 59) | func (m *AlertTaskHelper) StartTask() {
method StopTask (line 68) | func (m *AlertTaskHelper) StopTask() {
method ResetTask (line 73) | func (m *AlertTaskHelper) ResetTask() {
method InitTask (line 78) | func (m *AlertTaskHelper) InitTask(alertType string) {
method getClassifiedAlerts (line 101) | func (m *AlertTaskHelper) getClassifiedAlerts() (baseAlerts, resourceA...
type IAlertTaskHelper (line 40) | type IAlertTaskHelper interface
function NewIAlertTaskHelper (line 53) | func NewIAlertTaskHelper() IAlertTaskHelper {
function resetAlertState (line 88) | func resetAlertState(alertType string) {
function handleBaseAlerts (line 113) | func handleBaseAlerts(baseAlerts []dto.AlertDTO) {
function handleResourceAlerts (line 132) | func handleResourceAlerts(resourceAlerts []dto.AlertDTO) {
function stopBaseJob (line 150) | func stopBaseJob() {
function stopResourceJob (line 158) | func stopResourceJob() {
function baseTask (line 166) | func baseTask(baseAlert []dto.AlertDTO) {
function resourceTask (line 188) | func resourceTask(resourceAlert []dto.AlertDTO) {
function loadSSLInfo (line 220) | func loadSSLInfo(alert dto.AlertDTO) {
function loadWebsiteInfo (line 258) | func loadWebsiteInfo(alert dto.AlertDTO) {
function loadPanelPwd (line 297) | func loadPanelPwd(alert dto.AlertDTO) {
function loadPanelUpdate (line 318) | func loadPanelUpdate(alert dto.AlertDTO) {
function loadCPUUsage (line 336) | func loadCPUUsage(alert dto.AlertDTO) {
function loadMemUsage (line 363) | func loadMemUsage(alert dto.AlertDTO) {
function loadLoadInfo (line 389) | func loadLoadInfo(alert dto.AlertDTO) {
function loadDiskUsage (line 419) | func loadDiskUsage(alert dto.AlertDTO) {
function loadPanelLogin (line 434) | func loadPanelLogin(alert dto.AlertDTO) {
function loadSSHLogin (line 484) | func loadSSHLogin(alert dto.AlertDTO) {
function loadNodeException (line 527) | func loadNodeException(alert dto.AlertDTO) {
function loadLicenseException (line 556) | func loadLicenseException(alert dto.AlertDTO) {
function sendAlerts (line 584) | func sendAlerts(alert dto.AlertDTO, alertType, quota, quotaType string, ...
function getRepoOptionsByProject (line 660) | func getRepoOptionsByProject(project string) []repo.DBOption {
function serializeAndSortProjects (line 669) | func serializeAndSortProjects(projectMap map[uint][]time.Time) string {
function calculateSSLExpiryDays (line 687) | func calculateSSLExpiryDays(sslList []model.WebsiteSSL, cycle uint) (map...
function calculateWebsiteExpiryDays (line 704) | func calculateWebsiteExpiryDays(websites []model.Website, cycle uint) (m...
function getSettingValue (line 721) | func getSettingValue(key string) (string, error) {
function getValidVersion (line 730) | func getValidVersion(info *dto.UpgradeInfo) string {
function shouldSendResourceAlert (line 741) | func shouldSendResourceAlert(alert dto.AlertDTO, currentUsage float64, u...
function isAlertDue (line 760) | func isAlertDue(lastAlertTime time.Time) bool {
function sendResourceAlert (line 767) | func sendResourceAlert(alert dto.AlertDTO, value float64) {
function getModuleName (line 775) | func getModuleName(alertType string) string {
function canSendAlertToday (line 789) | func canSendAlertToday(alertType, quotaType string, sendCount uint, meth...
function average (line 802) | func average(arr []float64) float64 {
function createAlertBaseParams (line 810) | func createAlertBaseParams(project, cycle string) []dto.Param {
function createAlertPwdParams (line 825) | func createAlertPwdParams(cycle string) []dto.Param {
function createAlertAvgParams (line 835) | func createAlertAvgParams(cycle, module, count string) []dto.Param {
function createAlertDiskParams (line 855) | func createAlertDiskParams(project, count string) []dto.Param {
function processAllDisks (line 870) | func processAllDisks(alert dto.AlertDTO) error {
function processSingleDisk (line 892) | func processSingleDisk(alert dto.AlertDTO) error {
function checkAndCreateDiskAlert (line 901) | func checkAndCreateDiskAlert(alert dto.AlertDTO, path string) error {
function calculateUsedTotal (line 922) | func calculateUsedTotal(cycle uint, usageStat *disk.UsageStat) (float64,...
function calculateDaysDifference (line 929) | func calculateDaysDifference(expirationTime time.Time) int {
function calculateMinutesDifference (line 941) | func calculateMinutesDifference(newDate time.Time) int {
FILE: agent/app/service/alert_sender.go
type AlertSender (line 12) | type AlertSender struct
method Send (line 24) | func (s *AlertSender) Send(quota string, params []dto.Param) {
method ResourceSend (line 39) | func (s *AlertSender) ResourceSend(quota string, params []dto.Param) {
method sendSMS (line 54) | func (s *AlertSender) sendSMS(quota string, params []dto.Param) {
method sendEmail (line 79) | func (s *AlertSender) sendEmail(quota string, params []dto.Param) {
method sendWebhook (line 104) | func (s *AlertSender) sendWebhook(quota string, params []dto.Param, me...
method sendResourceSMS (line 126) | func (s *AlertSender) sendResourceSMS(quota string, params []dto.Param) {
method sendResourceEmail (line 150) | func (s *AlertSender) sendResourceEmail(quota string, params []dto.Par...
method sendResourceWebhook (line 174) | func (s *AlertSender) sendResourceWebhook(quota string, params []dto.P...
method canSendAlert (line 195) | func (s *AlertSender) canSendAlert(method string) (uint, bool) {
method canResourceSendAlert (line 208) | func (s *AlertSender) canResourceSendAlert(method string) (uint, bool) {
function NewAlertSender (line 17) | func NewAlertSender(alert dto.AlertDTO, quotaType string) *AlertSender {
FILE: agent/app/service/app.go
type AppService (line 43) | type AppService struct
method PageApp (line 68) | func (a AppService) PageApp(ctx *gin.Context, req request.AppSearch) (...
method GetAppTags (line 173) | func (a AppService) GetAppTags(ctx *gin.Context) ([]response.TagDTO, e...
method GetApp (line 195) | func (a AppService) GetApp(ctx *gin.Context, key string) (*response.Ap...
method GetAppDetailByKey (line 219) | func (a AppService) GetAppDetailByKey(appKey, version string) (respons...
method GetAppDetail (line 233) | func (a AppService) GetAppDetail(appID uint, version, appType string) ...
method GetAppDetailByID (line 330) | func (a AppService) GetAppDetailByID(id uint) (*response.AppDetailDTO,...
method Install (line 346) | func (a AppService) Install(req request.AppInstallCreate, executeScrip...
method installWithHooks (line 350) | func (a AppService) installWithHooks(req request.AppInstallCreate, exe...
method SyncAppListFromLocal (line 595) | func (a AppService) SyncAppListFromLocal(TaskID string) {
method GetAppUpdate (line 827) | func (a AppService) GetAppUpdate() (*response.AppUpdateRes, error) {
method SyncAppListFromRemote (line 967) | func (a AppService) SyncAppListFromRemote(taskID string) (err error) {
method GetAppIcon (line 1022) | func (a AppService) GetAppIcon(key string) ([]byte, string, string, er...
type IAppService (line 46) | type IAppService interface
type appInstallHooks (line 60) | type appInstallHooks struct
function NewIAppService (line 64) | func NewIAppService() IAppService {
function getAppFromRepo (line 889) | func getAppFromRepo(downloadPath string) error {
function getAppList (line 907) | func getAppList() (*dto.AppList, error) {
function deleteCustomApp (line 931) | func deleteCustomApp() {
FILE: agent/app/service/app_ingore_upgrade.go
type AppIgnoreUpgradeService (line 12) | type AppIgnoreUpgradeService struct
method List (line 25) | func (a AppIgnoreUpgradeService) List() ([]response.AppIgnoreUpgradeDT...
method CreateAppIgnore (line 57) | func (a AppIgnoreUpgradeService) CreateAppIgnore(req request.AppIgnore...
method Delete (line 74) | func (a AppIgnoreUpgradeService) Delete(req request.ReqWithID) error {
type IAppIgnoreUpgradeService (line 15) | type IAppIgnoreUpgradeService interface
function NewIAppIgnoreUpgradeService (line 21) | func NewIAppIgnoreUpgradeService() IAppIgnoreUpgradeService {
FILE: agent/app/service/app_install.go
type AppInstallService (line 38) | type AppInstallService struct
method GetInstallList (line 67) | func (a *AppInstallService) GetInstallList() ([]dto.AppInstallInfo, er...
method Page (line 79) | func (a *AppInstallService) Page(req request.AppInstalledSearch) (int6...
method CheckExist (line 133) | func (a *AppInstallService) CheckExist(req request.AppInstalledInfo) (...
method LoadPort (line 177) | func (a *AppInstallService) LoadPort(req dto.OperationWithNameAndType)...
method LoadConnInfo (line 185) | func (a *AppInstallService) LoadConnInfo(req dto.OperationWithNameAndT...
method SearchForWebsite (line 200) | func (a *AppInstallService) SearchForWebsite(req request.AppInstalledS...
method Operate (line 246) | func (a *AppInstallService) Operate(req request.AppInstalledOperate) e...
method UpdateAppConfig (line 314) | func (a *AppInstallService) UpdateAppConfig(req request.AppConfigUpdat...
method UpdateSort (line 326) | func (a *AppInstallService) UpdateSort(req request.AppInstallSort) err...
method Update (line 335) | func (a *AppInstallService) Update(req request.AppInstalledUpdate) err...
method SyncAll (line 471) | func (a *AppInstallService) SyncAll(systemInit bool) error {
method GetServices (line 501) | func (a *AppInstallService) GetServices(key string) ([]response.AppSer...
method GetUpdateVersions (line 570) | func (a *AppInstallService) GetUpdateVersions(req request.AppUpdateVer...
method ChangeAppPort (line 630) | func (a *AppInstallService) ChangeAppPort(req request.PortUpdate) error {
method DeleteCheck (line 658) | func (a *AppInstallService) DeleteCheck(installID uint) ([]dto.AppReso...
method GetDefaultConfigByKey (line 686) | func (a *AppInstallService) GetDefaultConfigByKey(key, name string) (s...
method GetParams (line 717) | func (a *AppInstallService) GetParams(id uint) (*response.AppConfig, e...
method GetAppInstallInfo (line 948) | func (a *AppInstallService) GetAppInstallInfo(installID uint) (*respon...
type IAppInstallService (line 41) | type IAppInstallService interface
function NewIAppInstalledService (line 63) | func NewIAppInstalledService() IAppInstallService {
function syncAppInstallStatus (line 829) | func syncAppInstallStatus(appInstall *model.AppInstall, force bool) error {
function upda
Copy disabled (too large)
Download .json
Condensed preview — 1456 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,531K chars).
[
{
"path": ".gitattributes",
"chars": 135,
"preview": "*.ts linguist-language=Go\n*.js linguist-language=Go\n*.css linguist-language=Go\n*.scss linguist-language=Go\n*.html lingui"
},
{
"path": ".github/ISSUE_TEMPLATE/1_bug_report.yml",
"chars": 1599,
"preview": "name: 'Bug Report'\ndescription: 'Report an Bug'\ntitle: '[Bug] '\nassignees: wanghe-fit2cloud\nbody:\n - type: markdown\n "
},
{
"path": ".github/ISSUE_TEMPLATE/2_feature_request.yml",
"chars": 925,
"preview": "name: 'Feature Request'\ndescription: 'Suggest an idea'\ntitle: '[Feature] '\nassignees: wanghe-fit2cloud\nbody:\n - type: m"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 235,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Questions & Discussions\n url: https://github.com/1Panel-dev/1Pan"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 413,
"preview": "#### What this PR does / why we need it?\n\n#### Summary of your change\n\n#### Please indicate you've done the following:\n\n"
},
{
"path": ".github/workflows/add-labels-for-pr.yml",
"chars": 423,
"preview": "\nname: General PR Handling for 1Panel\non: pull_request\npermissions:\n pull-requests: write\njobs:\n generic_handler:\n "
},
{
"path": ".github/workflows/build-and-publish.yml",
"chars": 1957,
"preview": "name: Build And Publish (OSS + R2)\n\non:\n push:\n tags:\n - 'v*'\n\njobs:\n create-release:\n runs-on: ubuntu-late"
},
{
"path": ".github/workflows/issue-translator.yml",
"chars": 312,
"preview": "name: Issue Translator\non: \n issue_comment: \n types: [created]\n issues: \n types: [opened]\njobs:\n build:\n run"
},
{
"path": ".github/workflows/llm-code-review.yml",
"chars": 973,
"preview": "name: LLM Code Review\npermissions:\n contents: read\n pull-requests: write\non:\n pull_request:\n types: [opened, reope"
},
{
"path": ".github/workflows/sonarcloud-scan.yml",
"chars": 521,
"preview": "name: SonarCloud Scan\non:\n push:\n branches:\n - dev\n pull_request:\n types: [opened, synchronize, reopened]\nj"
},
{
"path": ".github/workflows/sync2gitee.yml",
"chars": 503,
"preview": "name: Synchronize to Gitee\non: [push]\njobs:\n repo-sync:\n if: github.repository == '1Panel-dev/1Panel'\n runs-on: u"
},
{
"path": ".github/workflows/tyops-check.yml",
"chars": 251,
"preview": "name: Typos Check\non: pull_request\njobs:\n run:\n name: Spell Check with Typos\n runs-on: ubuntu-latest\n steps:\n "
},
{
"path": ".gitignore",
"chars": 1212,
"preview": "# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\nbuild/1panel-agent\nbuild/1panel-core\n\n# Mac\n.DS_Stor"
},
{
"path": ".goreleaser.yaml",
"chars": 1494,
"preview": "# yaml-language-server: $schema=https://goreleaser.com/static/schema.json\n# vim: set ts=2 sw=2 tw=0 fo=jcroql\nversion: 2"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5202,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
},
{
"path": "CONTRIBUTING.md",
"chars": 1958,
"preview": "# Contributing\n\nAs a contributor, you should agree that:\n\n- The producer can adjust the open-source agreement to be more"
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "Makefile",
"chars": 1474,
"preview": "GOCMD=go\nGOBUILD=$(GOCMD) build\nGOCLEAN=$(GOCMD) clean\nGOARCH=$(shell go env GOARCH)\nGOOS=$(shell go env GOOS )\n\nBASE_PA"
},
{
"path": "OWNERS",
"chars": 119,
"preview": "reviewers:\n- wanghe-fit2cloud\n- zhengkunwang223\n- ssongliu\n\napprovers:\n- wanghe-fit2cloud\n- zhengkunwang223\n- ssongliu\n"
},
{
"path": "README.md",
"chars": 5763,
"preview": "<p align=\"center\"><a href=\"https://1panel.pro\"><img src=\"https://resource.1panel.pro/img/1panel-logo.png\" alt=\"1Panel\" w"
},
{
"path": "SECURITY.md",
"chars": 615,
"preview": "# Security policy\n\n## Supported versions\n\n| Version | Supported |\n| ------- | ------------------ |\n| v1.x |"
},
{
"path": "agent/app/api/v2/agents.go",
"chars": 18720,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/ai.go",
"chars": 6807,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/alert.go",
"chars": 4364,
"preview": "package v2\n\nimport (\n\t\"errors\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/ag"
},
{
"path": "agent/app/api/v2/app.go",
"chars": 6676,
"preview": "package v2\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel"
},
{
"path": "agent/app/api/v2/app_ignore_upgrade.go",
"chars": 1871,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/app_install.go",
"chars": 10626,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/dto/request\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api"
},
{
"path": "agent/app/api/v2/backup.go",
"chars": 15478,
"preview": "package v2\n\nimport (\n\t\"fmt\"\n\t\"path\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Pa"
},
{
"path": "agent/app/api/v2/clam.go",
"chars": 7618,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/compose_template.go",
"chars": 4398,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/container.go",
"chars": 26093,
"preview": "package v2\n\nimport (\n\t\"net/http\"\n\t\"net/url\"\n\t\"path\"\n\t\"strconv\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n"
},
{
"path": "agent/app/api/v2/cronjob.go",
"chars": 10138,
"preview": "package v2\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.co"
},
{
"path": "agent/app/api/v2/dashboard.go",
"chars": 6135,
"preview": "package v2\n\nimport (\n\t\"errors\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/a"
},
{
"path": "agent/app/api/v2/database.go",
"chars": 6299,
"preview": "package v2\n\nimport (\n\t\"encoding/base64\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev"
},
{
"path": "agent/app/api/v2/database_common.go",
"chars": 2054,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/database_mysql.go",
"chars": 10029,
"preview": "package v2\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com"
},
{
"path": "agent/app/api/v2/database_postgresql.go",
"chars": 7153,
"preview": "package v2\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com"
},
{
"path": "agent/app/api/v2/database_redis.go",
"chars": 4524,
"preview": "package v2\n\nimport (\n\t\"encoding/base64\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev"
},
{
"path": "agent/app/api/v2/device.go",
"chars": 6396,
"preview": "package v2\n\nimport (\n\t\"encoding/base64\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev"
},
{
"path": "agent/app/api/v2/disk.go",
"chars": 3213,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/docker.go",
"chars": 4852,
"preview": "package v2\n\nimport (\n\t\"os\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent"
},
{
"path": "agent/app/api/v2/entry.go",
"chars": 2817,
"preview": "package v2\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/service\"\n\ntype ApiGroup struct {\n\tBaseApi\n}\n\nvar ApiGroupApp "
},
{
"path": "agent/app/api/v2/fail2ban.go",
"chars": 3868,
"preview": "package v2\n\nimport (\n\t\"os\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent"
},
{
"path": "agent/app/api/v2/favorite.go",
"chars": 2203,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/file.go",
"chars": 27636,
"preview": "package v2\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"str"
},
{
"path": "agent/app/api/v2/firewall.go",
"chars": 9188,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/ftp.go",
"chars": 5133,
"preview": "package v2\n\nimport (\n\t\"encoding/base64\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev"
},
{
"path": "agent/app/api/v2/group.go",
"chars": 2768,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/health.go",
"chars": 177,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc (b *Bas"
},
{
"path": "agent/app/api/v2/helper/helper.go",
"chars": 3745,
"preview": "package helper\n\nimport (\n\t\"compress/gzip\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n"
},
{
"path": "agent/app/api/v2/host.go",
"chars": 3895,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/host_tool.go",
"chars": 4643,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/image.go",
"chars": 6408,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/image_repo.go",
"chars": 3902,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/logs.go",
"chars": 463,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// @Tags Log"
},
{
"path": "agent/app/api/v2/mcp_server.go",
"chars": 4142,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/monitor.go",
"chars": 3509,
"preview": "package v2\n\nimport (\n\t\"sort\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/age"
},
{
"path": "agent/app/api/v2/nginx.go",
"chars": 5537,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/php_extensions.go",
"chars": 2685,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/process.go",
"chars": 1882,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/recycle_bin.go",
"chars": 2310,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/runtime.go",
"chars": 15603,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/setting.go",
"chars": 6042,
"preview": "package v2\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1"
},
{
"path": "agent/app/api/v2/snapshot.go",
"chars": 6592,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/ssh.go",
"chars": 7728,
"preview": "package v2\n\nimport (\n\t\"encoding/base64\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev"
},
{
"path": "agent/app/api/v2/system.go",
"chars": 667,
"preview": "package v2\n\nimport (\n\t\"errors\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n//"
},
{
"path": "agent/app/api/v2/task.go",
"chars": 1120,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/tensorrt_llm.go",
"chars": 1543,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/terminal.go",
"chars": 8156,
"preview": "package v2\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/1Panel-dev/"
},
{
"path": "agent/app/api/v2/website.go",
"chars": 39003,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/website_acme_account.go",
"chars": 3282,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/website_ca.go",
"chars": 5496,
"preview": "package v2\n\nimport (\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github"
},
{
"path": "agent/app/api/v2/website_dns_account.go",
"chars": 3013,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/website_domain.go",
"chars": 3083,
"preview": "package v2\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/dt"
},
{
"path": "agent/app/api/v2/website_ssl.go",
"chars": 10194,
"preview": "package v2\n\nimport (\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app"
},
{
"path": "agent/app/dto/agents.go",
"chars": 11815,
"preview": "package dto\n\nimport \"time\"\n\ntype AgentCreateReq struct {\n\tName string `json:\"name\" validate:\"required\"`\n\tApp"
},
{
"path": "agent/app/dto/ai.go",
"chars": 1193,
"preview": "package dto\n\nimport \"time\"\n\ntype OllamaModelInfo struct {\n\tID uint `json:\"id\"`\n\tName string `json:\"n"
},
{
"path": "agent/app/dto/alert.go",
"chars": 9951,
"preview": "package dto\n\nimport (\n\t\"encoding/json\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"time\"\n)\n\ntype CreateOrUpdateAle"
},
{
"path": "agent/app/dto/app.go",
"chars": 5579,
"preview": "package dto\n\nimport (\n\t\"context\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"github.com/1Panel-dev/1Panel/agent/ap"
},
{
"path": "agent/app/dto/backup.go",
"chars": 4288,
"preview": "package dto\n\nimport (\n\t\"time\"\n)\n\ntype BackupOperate struct {\n\tID uint `json:\"id\"`\n\tName string `json:\"na"
},
{
"path": "agent/app/dto/clam.go",
"chars": 3177,
"preview": "package dto\n\nimport (\n\t\"time\"\n)\n\ntype SearchClamWithPage struct {\n\tPageInfo\n\tInfo string `json:\"info\"`\n\tOrderBy strin"
},
{
"path": "agent/app/dto/command.go",
"chars": 1049,
"preview": "package dto\n\ntype SearchCommandWithPage struct {\n\tPageInfo\n\tOrderBy string `json:\"orderBy\" validate:\"required,oneof=name"
},
{
"path": "agent/app/dto/common_req.go",
"chars": 1805,
"preview": "package dto\n\ntype SearchWithPage struct {\n\tPageInfo\n\tInfo string `json:\"info\"`\n}\n\ntype SearchPageWithType struct {\n\tPage"
},
{
"path": "agent/app/dto/common_res.go",
"chars": 298,
"preview": "package dto\n\ntype PageResult struct {\n\tTotal int64 `json:\"total\"`\n\tItems interface{} `json:\"items\"`\n}\n\ntype Respon"
},
{
"path": "agent/app/dto/compose_template.go",
"chars": 694,
"preview": "package dto\n\nimport \"time\"\n\ntype ComposeTemplateCreate struct {\n\tName string `json:\"name\" validate:\"required\"`\n\tD"
},
{
"path": "agent/app/dto/container.go",
"chars": 11558,
"preview": "package dto\n\nimport (\n\t\"time\"\n)\n\ntype PageContainer struct {\n\tPageInfo\n\tName string `json:\"name\"`\n\tState "
},
{
"path": "agent/app/dto/cronjob.go",
"chars": 6620,
"preview": "package dto\n\nimport (\n\t\"time\"\n)\n\ntype PageCronjob struct {\n\tPageInfo\n\tInfo string `json:\"info\"`\n\tGroupIDs []uint `js"
},
{
"path": "agent/app/dto/dashboard.go",
"chars": 6611,
"preview": "package dto\n\nimport \"time\"\n\ntype DashboardBase struct {\n\tWebsiteNumber int `json:\"websiteNumber\"`\n\tAgentNumber "
},
{
"path": "agent/app/dto/database.go",
"chars": 12877,
"preview": "package dto\n\nimport \"time\"\n\n// common\ntype DBConfUpdateByFile struct {\n\tType string `json:\"type\" validate:\"required,"
},
{
"path": "agent/app/dto/database_postgresql.go",
"chars": 2809,
"preview": "package dto\n\nimport \"time\"\n\ntype PostgresqlDBSearch struct {\n\tPageInfo\n\tInfo string `json:\"info\"`\n\tDatabase string `"
},
{
"path": "agent/app/dto/device.go",
"chars": 1033,
"preview": "package dto\n\ntype DeviceBaseInfo struct {\n\tDNS []string `json:\"dns\"`\n\tHosts []HostHelper `json:\"hosts\"`\n\tH"
},
{
"path": "agent/app/dto/disk.go",
"chars": 755,
"preview": "package dto\n\ntype LsblkDevice struct {\n\tName string `json:\"name\"`\n\tSize string `json:\"size\"`\n\t"
},
{
"path": "agent/app/dto/docker.go",
"chars": 1148,
"preview": "package dto\n\ntype DaemonJsonUpdateByFile struct {\n\tFile string `json:\"file\"`\n}\n\ntype DockerStatus struct {\n\tIsActive boo"
},
{
"path": "agent/app/dto/fail2ban.go",
"chars": 803,
"preview": "package dto\n\ntype Fail2BanBaseInfo struct {\n\tIsEnable bool `json:\"isEnable\"`\n\tIsActive bool `json:\"isActive\"`\n\tIsExi"
},
{
"path": "agent/app/dto/file.go",
"chars": 204,
"preview": "package dto\n\ntype LogFileRes struct {\n\tLines []string `json:\"lines\"`\n\tIsEndOfFile bool `json:\"isEndOfFile\"`\n\tT"
},
{
"path": "agent/app/dto/firewall.go",
"chars": 3725,
"preview": "package dto\n\ntype FirewallBaseInfo struct {\n\tName string `json:\"name\"`\n\tIsExist bool `json:\"isExist\"`\n\tIsActi"
},
{
"path": "agent/app/dto/ftp.go",
"chars": 989,
"preview": "package dto\n\nimport (\n\t\"time\"\n)\n\ntype FtpInfo struct {\n\tID uint `json:\"id\"`\n\tCreatedAt time.Time `json:\"crea"
},
{
"path": "agent/app/dto/group.go",
"chars": 632,
"preview": "package dto\n\ntype GroupCreate struct {\n\tID uint `json:\"id\"`\n\tName string `json:\"name\" validate:\"required\"`\n\tType str"
},
{
"path": "agent/app/dto/host.go",
"chars": 2003,
"preview": "package dto\n\nimport \"time\"\n\ntype HostOperate struct {\n\tID uint `json:\"id\"`\n\tGroupID uint `jso"
},
{
"path": "agent/app/dto/image.go",
"chars": 1702,
"preview": "package dto\n\nimport \"time\"\n\ntype PageImage struct {\n\tPageInfo\n\tName string `json:\"name\"`\n\tOrderBy string `json:\"order"
},
{
"path": "agent/app/dto/image_repo.go",
"chars": 1149,
"preview": "package dto\n\nimport \"time\"\n\ntype ImageRepoCreate struct {\n\tName string `json:\"name\" validate:\"required\"`\n\tDownloa"
},
{
"path": "agent/app/dto/logs.go",
"chars": 213,
"preview": "package dto\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n)\n\ntype SearchTaskLogReq struct {\n\tStatus string `"
},
{
"path": "agent/app/dto/monitor.go",
"chars": 2541,
"preview": "package dto\n\nimport \"time\"\n\ntype MonitorSearch struct {\n\tParam string `json:\"param\" validate:\"required,oneof=all "
},
{
"path": "agent/app/dto/nginx.go",
"chars": 2409,
"preview": "package dto\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"github.com/1Panel-dev/1Panel/agent/utils/nginx/c"
},
{
"path": "agent/app/dto/request/app.go",
"chars": 4628,
"preview": "package request\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/dto\"\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n"
},
{
"path": "agent/app/dto/request/app_ignore_upgrade.go",
"chars": 222,
"preview": "package request\n\ntype AppIgnoreUpgradeReq struct {\n\tAppID uint `json:\"appID\" validate:\"required\"`\n\tAppDetailID u"
},
{
"path": "agent/app/dto/request/common.go",
"chars": 84,
"preview": "package request\n\ntype ReqWithID struct {\n\tID uint `json:\"id\" validate:\"required\"`\n}\n"
},
{
"path": "agent/app/dto/request/disk.go",
"chars": 704,
"preview": "package request\n\ntype DiskPartitionRequest struct {\n\tDevice string `json:\"device\" validate:\"required\"`\n\tFilesystem s"
},
{
"path": "agent/app/dto/request/favorite.go",
"chars": 168,
"preview": "package request\n\ntype FavoriteCreate struct {\n\tPath string `json:\"path\" validate:\"required\"`\n}\n\ntype FavoriteDelete stru"
},
{
"path": "agent/app/dto/request/file.go",
"chars": 4874,
"preview": "package request\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/dto\"\n\t\"github.com/1Panel-dev/1Panel/agent/utils/files"
},
{
"path": "agent/app/dto/request/host_tool.go",
"chars": 1345,
"preview": "package request\n\ntype HostToolReq struct {\n\tType string `json:\"type\" validate:\"required,oneof=supervisord\"`\n\tOperate "
},
{
"path": "agent/app/dto/request/mcp_server.go",
"chars": 1539,
"preview": "package request\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/dto\"\n\ntype McpServerSearch struct {\n\tdto.PageInfo\n\tName "
},
{
"path": "agent/app/dto/request/nginx.go",
"chars": 4554,
"preview": "package request\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/dto\"\n\ntype NginxConfigFileUpdate struct {\n\tContent strin"
},
{
"path": "agent/app/dto/request/php_extensions.go",
"chars": 517,
"preview": "package request\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/dto\"\n\ntype PHPExtensionsSearch struct {\n\tdto.PageInfo\n\tA"
},
{
"path": "agent/app/dto/request/process.go",
"chars": 89,
"preview": "package request\n\ntype ProcessReq struct {\n\tPID int32 `json:\"PID\" validate:\"required\"`\n}\n"
},
{
"path": "agent/app/dto/request/recycle_bin.go",
"chars": 268,
"preview": "package request\n\ntype RecycleBinCreate struct {\n\tSourcePath string `json:\"sourcePath\" validate:\"required\"`\n}\n\ntype Recyc"
},
{
"path": "agent/app/dto/request/runtime.go",
"chars": 3999,
"preview": "package request\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/dto\"\n)\n\ntype RuntimeSearch struct {\n\tdto.PageInfo\n\tTy"
},
{
"path": "agent/app/dto/request/task.go",
"chars": 16,
"preview": "package request\n"
},
{
"path": "agent/app/dto/request/tensorrt_llm.go",
"chars": 1121,
"preview": "package request\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/dto\"\n\ntype TensorRTLLMSearch struct {\n\tdto.PageInfo\n\tNam"
},
{
"path": "agent/app/dto/request/website.go",
"chars": 12269,
"preview": "package request\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/dto\"\n)\n\ntype WebsiteSearch struct {\n\tdto.PageInfo\n\tNa"
},
{
"path": "agent/app/dto/request/website_ssl.go",
"chars": 6002,
"preview": "package request\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/dto\"\n\ntype WebsiteSSLSearch struct {\n\tdto.PageInfo\n\tAcme"
},
{
"path": "agent/app/dto/response/app.go",
"chars": 5697,
"preview": "package response\n\nimport (\n\t\"time\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/dto\"\n\t\"github.com/1Panel-dev/1Panel/agent/a"
},
{
"path": "agent/app/dto/response/app_ignore_upgrade.go",
"chars": 268,
"preview": "package response\n\ntype AppIgnoreUpgradeDTO struct {\n\tID uint `json:\"ID\"`\n\tAppID uint `json:\"appID\"`\n\t"
},
{
"path": "agent/app/dto/response/disk.go",
"chars": 1120,
"preview": "package response\n\ntype DiskInfo struct {\n\tDiskBasicInfo\n\tPartitions []DiskBasicInfo `json:\"partitions\"`\n}\n\ntype DiskBasi"
},
{
"path": "agent/app/dto/response/favorite.go",
"chars": 117,
"preview": "package response\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/model\"\n\ntype FavoriteDTO struct {\n\tmodel.Favorite\n}\n"
},
{
"path": "agent/app/dto/response/file.go",
"chars": 1791,
"preview": "package response\n\nimport (\n\t\"time\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/utils/files\"\n)\n\ntype FileInfo struct {\n\tfiles.F"
},
{
"path": "agent/app/dto/response/host_tool.go",
"chars": 1257,
"preview": "package response\n\ntype HostToolRes struct {\n\tType string `json:\"type\"`\n\tConfig interface{} `json:\"config\"`\n}\n\ntyp"
},
{
"path": "agent/app/dto/response/mcp_server.go",
"chars": 680,
"preview": "package response\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/dto/request\"\n\t\"github.com/1Panel-dev/1Panel/agent/ap"
},
{
"path": "agent/app/dto/response/nginx.go",
"chars": 2370,
"preview": "package response\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/dto\"\n\ntype NginxStatus struct {\n\tActive int `json:\"ac"
},
{
"path": "agent/app/dto/response/php_extensions.go",
"chars": 127,
"preview": "package response\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/model\"\n\ntype PHPExtensionsDTO struct {\n\tmodel.PHPExtens"
},
{
"path": "agent/app/dto/response/recycle_bin.go",
"chars": 365,
"preview": "package response\n\nimport \"time\"\n\ntype RecycleBinDTO struct {\n\tName string `json:\"name\"`\n\tSize int `"
},
{
"path": "agent/app/dto/response/runtime.go",
"chars": 2890,
"preview": "package response\n\nimport (\n\t\"time\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/dto/request\"\n\t\"github.com/1Panel-dev/1Panel"
},
{
"path": "agent/app/dto/response/system.go",
"chars": 174,
"preview": "package response\n\ntype ComponentInfo struct {\n\tExists bool `json:\"exists\"`\n\tVersion string `json:\"version\"`\n\tPath "
},
{
"path": "agent/app/dto/response/task.go",
"chars": 17,
"preview": "package response\n"
},
{
"path": "agent/app/dto/response/tensorrt_llm.go",
"chars": 660,
"preview": "package response\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/dto/request\"\n\t\"github.com/1Panel-dev/1Panel/agent/ap"
},
{
"path": "agent/app/dto/response/website.go",
"chars": 3914,
"preview": "package response\n\nimport (\n\t\"time\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/dto\"\n\t\"github.com/1Panel-dev/1Panel/agent/a"
},
{
"path": "agent/app/dto/response/website_ssl.go",
"chars": 806,
"preview": "package response\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/model\"\n\ntype WebsiteSSLDTO struct {\n\tmodel.WebsiteSSL\n\t"
},
{
"path": "agent/app/dto/setting.go",
"chars": 3030,
"preview": "package dto\n\ntype SettingInfo struct {\n\tDockerSockPath string `json:\"dockerSockPath\"`\n\tSystemVersion string `json:\"syst"
},
{
"path": "agent/app/dto/snapshot.go",
"chars": 3655,
"preview": "package dto\n\nimport \"time\"\n\ntype PageSnapshot struct {\n\tPageInfo\n\tInfo string `json:\"info\"`\n\tOrderBy string `json:\"or"
},
{
"path": "agent/app/dto/ssh.go",
"chars": 2233,
"preview": "package dto\n\nimport \"time\"\n\ntype SSHUpdate struct {\n\tKey string `json:\"key\" validate:\"required\"`\n\tOldValue string `"
},
{
"path": "agent/app/model/agent.go",
"chars": 692,
"preview": "package model\n\ntype Agent struct {\n\tBaseModel\n\tName string `json:\"name\" gorm:\"not null;unique\"`\n\tAgentType "
},
{
"path": "agent/app/model/agent_account.go",
"chars": 457,
"preview": "package model\n\ntype AgentAccount struct {\n\tBaseModel\n\tProvider string `json:\"provider\"`\n\tName string `js"
},
{
"path": "agent/app/model/agent_account_model.go",
"chars": 515,
"preview": "package model\n\ntype AgentAccountModel struct {\n\tBaseModel\n\tAccountID uint `json:\"accountId\" gorm:\"index\"`\n\tModel "
},
{
"path": "agent/app/model/ai.go",
"chars": 210,
"preview": "package model\n\ntype OllamaModel struct {\n\tBaseModel\n\n\tName string `json:\"name\"`\n\tSize string `json:\"size\"`\n\tFrom "
},
{
"path": "agent/app/model/alert.go",
"chars": 2185,
"preview": "package model\n\ntype Alert struct {\n\tBaseModel\n\n\tTitle string `gorm:\"type:varchar(256);not null\" json:\"title\"`\n\t"
},
{
"path": "agent/app/model/app.go",
"chars": 2829,
"preview": "package model\n\nimport (\n\t\"encoding/json\"\n\t\"github.com/gin-gonic/gin\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/1Panel-de"
},
{
"path": "agent/app/model/app_detail.go",
"chars": 571,
"preview": "package model\n\ntype AppDetail struct {\n\tBaseModel\n\tAppId uint `json:\"appId\" gorm:\"not null\"`\n\tVersion "
},
{
"path": "agent/app/model/app_ignore_upgrade.go",
"chars": 170,
"preview": "package model\n\ntype AppIgnoreUpgrade struct {\n\tBaseModel\n\tAppID uint `json:\"appID\"`\n\tAppDetailID uint `json:\"a"
},
{
"path": "agent/app/model/app_install.go",
"chars": 1603,
"preview": "package model\n\nimport (\n\t\"path\"\n\t\"strings\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/constant\"\n\t\"github.com/1Panel-dev/1Pane"
},
{
"path": "agent/app/model/app_install_resource.go",
"chars": 332,
"preview": "package model\n\ntype AppInstallResource struct {\n\tBaseModel\n\tAppInstallId uint `json:\"appInstallId\" gorm:\"not null;\"`\n\t"
},
{
"path": "agent/app/model/app_launcher.go",
"chars": 354,
"preview": "package model\n\ntype AppLauncher struct {\n\tBaseModel\n\tKey string `json:\"key\"`\n}\n\ntype QuickJump struct {\n\tBaseModel\n\tName"
},
{
"path": "agent/app/model/app_tag.go",
"chars": 135,
"preview": "package model\n\ntype AppTag struct {\n\tBaseModel\n\tAppId uint `json:\"appId\" gorm:\"not null\"`\n\tTagId uint `json:\"tagId\" gorm"
},
{
"path": "agent/app/model/backup.go",
"chars": 1054,
"preview": "package model\n\ntype BackupAccount struct {\n\tBaseModel\n\tName string `gorm:\"not null;default:''\" json:\"name\"`\n\tType "
},
{
"path": "agent/app/model/base.go",
"chars": 202,
"preview": "package model\n\nimport \"time\"\n\ntype BaseModel struct {\n\tID uint `gorm:\"primarykey;AUTO_INCREMENT\" json:\"id\"`\n"
},
{
"path": "agent/app/model/clam.go",
"chars": 947,
"preview": "package model\n\nimport \"time\"\n\ntype Clam struct {\n\tBaseModel\n\n\tName string `gorm:\"not null\" json:\"name\"`\n\tPat"
},
{
"path": "agent/app/model/compose_template.go",
"chars": 285,
"preview": "package model\n\ntype ComposeTemplate struct {\n\tBaseModel\n\n\tName string `gorm:\"not null;unique\" json:\"name\"`\n\tDescr"
},
{
"path": "agent/app/model/cronjob.go",
"chars": 2036,
"preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype Cronjob struct {\n\tBaseModel\n\n\tName string `gorm:\"not null\" json:\"name\"`\n\tT"
},
{
"path": "agent/app/model/database.go",
"chars": 796,
"preview": "package model\n\ntype Database struct {\n\tBaseModel\n\tAppInstallID uint `json:\"appInstallID\"`\n\tName string `json:\""
},
{
"path": "agent/app/model/database_mysql.go",
"chars": 559,
"preview": "package model\n\ntype DatabaseMysql struct {\n\tBaseModel\n\tName string `json:\"name\" gorm:\"not null\"`\n\tFrom str"
},
{
"path": "agent/app/model/database_postgresql.go",
"chars": 540,
"preview": "package model\n\ntype DatabasePostgresql struct {\n\tBaseModel\n\tName string `json:\"name\" gorm:\"not null\"`\n\tFrom "
},
{
"path": "agent/app/model/favorite.go",
"chars": 234,
"preview": "package model\n\ntype Favorite struct {\n\tBaseModel\n\tName string `gorm:\"not null;\" json:\"name\" `\n\tPath string `gorm:\"not "
},
{
"path": "agent/app/model/firewall.go",
"chars": 489,
"preview": "package model\n\ntype Firewall struct {\n\tBaseModel\n\n\tType string `json:\"type\"`\n\tPort string `json:\"port\"` // Depr"
},
{
"path": "agent/app/model/ftp.go",
"chars": 310,
"preview": "package model\n\ntype Ftp struct {\n\tBaseModel\n\n\tUser string `gorm:\"not null\" json:\"user\"`\n\tPassword string `gorm"
},
{
"path": "agent/app/model/group.go",
"chars": 149,
"preview": "package model\n\ntype Group struct {\n\tBaseModel\n\tIsDefault bool `json:\"isDefault\"`\n\tName string `json:\"name\"`\n\tType"
},
{
"path": "agent/app/model/host.go",
"chars": 612,
"preview": "package model\n\ntype Host struct {\n\tBaseModel\n\n\tGroupID uint `gorm:\"not null\" json:\"group_id\"`\n\tName "
},
{
"path": "agent/app/model/image_repo.go",
"chars": 358,
"preview": "package model\n\ntype ImageRepo struct {\n\tBaseModel\n\n\tName string `gorm:\"not null\" json:\"name\"`\n\tDownloadUrl string"
},
{
"path": "agent/app/model/mcp_server.go",
"chars": 770,
"preview": "package model\n\ntype McpServer struct {\n\tBaseModel\n\tName string `json:\"name\"`\n\tDockerCompose string `j"
},
{
"path": "agent/app/model/monitor.go",
"chars": 1201,
"preview": "package model\n\ntype MonitorBase struct {\n\tBaseModel\n\tCpu float64 `json:\"cpu\"`\n\tTopCPU string `json"
},
{
"path": "agent/app/model/php_extensions.go",
"chars": 160,
"preview": "package model\n\ntype PHPExtensions struct {\n\tBaseModel\n\tName string `json:\"name\" gorm:\"not null\"`\n\tExtensions strin"
},
{
"path": "agent/app/model/runtime.go",
"chars": 1529,
"preview": "package model\n\nimport (\n\t\"path\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/global\"\n)\n\ntype Runtime struct {\n\tBaseModel\n\tName "
},
{
"path": "agent/app/model/setting.go",
"chars": 893,
"preview": "package model\n\ntype Setting struct {\n\tBaseModel\n\tKey string `json:\"key\" gorm:\"not null;\"`\n\tValue string `json:\"value\"`"
},
{
"path": "agent/app/model/snapshot.go",
"chars": 1304,
"preview": "package model\n\ntype Snapshot struct {\n\tBaseModel\n\tName string `json:\"name\" gorm:\"not null;unique\"`\n\tSecret "
},
{
"path": "agent/app/model/ssh.go",
"chars": 332,
"preview": "package model\n\ntype RootCert struct {\n\tBaseModel\n\tName string `json:\"name\" gorm:\"not null;\"`\n\tEncryptionMode s"
},
{
"path": "agent/app/model/tag.go",
"chars": 251,
"preview": "package model\n\ntype Tag struct {\n\tBaseModel\n\tKey string `json:\"key\" gorm:\"not null\"`\n\tName string `json"
},
{
"path": "agent/app/model/task.go",
"chars": 589,
"preview": "package model\n\nimport \"time\"\n\ntype Task struct {\n\tID string `gorm:\"primarykey;\" json:\"id\"`\n\tName "
},
{
"path": "agent/app/model/tensorrt_llm.go",
"chars": 415,
"preview": "package model\n\ntype TensorRTLLM struct {\n\tBaseModel\n\tName string `json:\"name\"`\n\tDockerCompose string `json:\"doc"
},
{
"path": "agent/app/model/website.go",
"chars": 1469,
"preview": "package model\n\nimport \"time\"\n\ntype Website struct {\n\tBaseModel\n\tProtocol string `gorm:\"not null\" json:\"protocol\""
},
{
"path": "agent/app/model/website_acme_account.go",
"chars": 627,
"preview": "package model\n\ntype WebsiteAcmeAccount struct {\n\tBaseModel\n\tEmail string `gorm:\"not null\" json:\"email\"`\n\tURL "
},
{
"path": "agent/app/model/website_ca.go",
"chars": 271,
"preview": "package model\n\ntype WebsiteCA struct {\n\tBaseModel\n\tCSR string `gorm:\"not null;\" json:\"csr\"`\n\tName string `g"
},
{
"path": "agent/app/model/website_dns_account.go",
"chars": 295,
"preview": "package model\n\ntype WebsiteDnsAccount struct {\n\tBaseModel\n\tName string `gorm:\"not null\" json:\"name\"`\n\tType "
},
{
"path": "agent/app/model/website_domain.go",
"chars": 314,
"preview": "package model\n\ntype WebsiteDomain struct {\n\tBaseModel\n\tWebsiteID uint `gorm:\"column:website_id;not null;\" json:\"websit"
},
{
"path": "agent/app/model/website_ssl.go",
"chars": 2002,
"preview": "package model\n\nimport (\n\t\"fmt\"\n\t\"path\"\n\t\"time\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/global\"\n)\n\ntype WebsiteSSL struct {"
},
{
"path": "agent/app/provider/catalog.go",
"chars": 8630,
"preview": "package provider\n\nimport (\n\t\"strings\"\n)\n\ntype Model struct {\n\tID string\n\tName string\n\tContextWindow "
},
{
"path": "agent/app/provider/openclaw.go",
"chars": 11349,
"preview": "package provider\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype OpenClawPatch struct {\n\tPrimaryModel string\n\tModels map[strin"
},
{
"path": "agent/app/provider/verify.go",
"chars": 4264,
"preview": "package provider\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/1Panel-dev/1Pan"
},
{
"path": "agent/app/repo/agent.go",
"chars": 1982,
"preview": "package repo\n\nimport (\n\t\"context\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n)\n\ntype AgentRepo struct{}\n\ntype IAge"
},
{
"path": "agent/app/repo/agent_account.go",
"chars": 1630,
"preview": "package repo\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/model\"\n\ntype AgentAccountRepo struct{}\n\ntype IAgentAccountR"
},
{
"path": "agent/app/repo/agent_account_model.go",
"chars": 1447,
"preview": "package repo\n\nimport \"github.com/1Panel-dev/1Panel/agent/app/model\"\n\ntype AgentAccountModelRepo struct{}\n\ntype IAgentAcc"
},
{
"path": "agent/app/repo/ai.go",
"chars": 1747,
"preview": "package repo\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"github.com/1Panel-dev/1Panel/agent/global\"\n)\n\nt"
},
{
"path": "agent/app/repo/alert.go",
"chars": 10466,
"preview": "package repo\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"github.com/1Panel-dev/1Panel/agent/constant\"\n\t\""
},
{
"path": "agent/app/repo/app.go",
"chars": 4530,
"preview": "package repo\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"gorm.io/gorm\"\n\t\"gorm.io/gorm"
},
{
"path": "agent/app/repo/app_detail.go",
"chars": 2615,
"preview": "package repo\n\nimport (\n\t\"context\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"gorm.io/gorm\"\n\t\"gorm.io/gorm/clause"
},
{
"path": "agent/app/repo/app_ignore_upgrade.go",
"chars": 1306,
"preview": "package repo\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"github.com/1Panel-dev/1Panel/agent/global\"\n\t\"go"
},
{
"path": "agent/app/repo/app_install.go",
"chars": 8171,
"preview": "package repo\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/constant\"\n\n\t\"gorm.io/gorm/claus"
},
{
"path": "agent/app/repo/app_install_resource.go",
"chars": 2431,
"preview": "package repo\n\nimport (\n\t\"context\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"github.com/1Panel-dev/1Panel/agent/"
},
{
"path": "agent/app/repo/app_launcher.go",
"chars": 3002,
"preview": "package repo\n\nimport (\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"github.com/1Panel-dev/1Panel/agent/global\"\n)\n\nt"
},
{
"path": "agent/app/repo/app_tag.go",
"chars": 2180,
"preview": "package repo\n\nimport (\n\t\"context\"\n\t\"gorm.io/gorm\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n)\n\ntype AppTagRepo st"
},
{
"path": "agent/app/repo/backup.go",
"chars": 5540,
"preview": "package repo\n\nimport (\n\t\"context\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"github.com/1Panel-dev/1Panel/agent/"
},
{
"path": "agent/app/repo/clam.go",
"chars": 4257,
"preview": "package repo\n\nimport (\n\t\"time\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/app/model\"\n\t\"github.com/1Panel-dev/1Panel/agent/con"
},
{
"path": "agent/app/repo/common.go",
"chars": 4396,
"preview": "package repo\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/1Panel-dev/1Panel/agent/constant\"\n\t\"github.com/1Panel-dev"
}
]
// ... and 1256 more files (download for full content)
About this extraction
This page contains the full source code of the 1Panel-dev/1Panel GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1456 files (14.5 MB), approximately 3.9M tokens, and a symbol index with 7280 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.