diff --git a/dns-api/dns_service.py b/dns-api/dns_service.py index 7d86f5d..8b20970 100644 --- a/dns-api/dns_service.py +++ b/dns-api/dns_service.py @@ -102,7 +102,7 @@ class DnsService: def list_records(self, domain_zone, rr_keyword=None, record_type=None): """ - 获取域名解析记录列表 + 获取域名解析记录列表(自动分页,拉取全部记录) Args: domain_zone: 主域名 (如 zgitm.com) @@ -112,31 +112,53 @@ class DnsService: Returns: list[dict]: 解析记录列表 """ - params = {'DomainName': domain_zone} + params = { + 'DomainName': domain_zone, + 'PageSize': '100', # 每页最大100条 + } if rr_keyword: params['RRKeyWord'] = rr_keyword if record_type: params['Type'] = record_type - resp = self._call('DescribeDomainRecords', params) - records = resp.get('DomainRecords', {}).get('Record', []) - # 统一转列表 - if isinstance(records, dict): - records = [records] + all_records = [] + page_number = 1 + total_count = None - result = [] - for r in records: - result.append({ - 'record_id': r.get('RecordId', ''), - 'rr': r.get('RR', ''), - 'type': r.get('Type', 'A'), - 'value': r.get('Value', ''), - 'ttl': r.get('TTL', 600), - 'line': r.get('Line', 'default'), - 'status': r.get('Status', 'ENABLE'), - 'full_domain': (r.get('RR', '') + '.' + domain_zone).strip('.'), - }) - return result + while True: + params['PageNumber'] = str(page_number) + resp = self._call('DescribeDomainRecords', params) + + domain_records = resp.get('DomainRecords', {}) + records = domain_records.get('Record', []) + + if total_count is None: + total_count = domain_records.get('TotalCount', 0) + logger.info(f'DNS 记录总数: {total_count}, 开始分页拉取...') + + # 统一转列表(单条记录时阿里云返回 dict) + if isinstance(records, dict): + records = [records] + + for r in records: + all_records.append({ + 'record_id': r.get('RecordId', ''), + 'rr': r.get('RR', ''), + 'type': r.get('Type', 'A'), + 'value': r.get('Value', ''), + 'ttl': r.get('TTL', 600), + 'line': r.get('Line', 'default'), + 'status': r.get('Status', 'ENABLE'), + 'full_domain': (r.get('RR', '') + '.' + domain_zone).strip('.'), + }) + + # 判断是否还有下一页 + if len(all_records) >= total_count or len(records) < 100: + break + page_number += 1 + + logger.info(f'DNS 记录拉取完成: zone={domain_zone}, 共 {len(all_records)} 条') + return all_records def add_record(self, domain_zone, rr, record_type, value, ttl=600): """ diff --git a/memory/MEMORY.md b/memory/MEMORY.md index 6cd11fc..5aeb323 100644 --- a/memory/MEMORY.md +++ b/memory/MEMORY.md @@ -1,4 +1,4 @@ -- [会话 2026-07-16 #1](session-20260716-1.md) — 宝塔API返回HTML错误排查(根因:10.1.1.170公网IP变更,白名单过期) +- [会话 2026-07-16 #1](session-20260716-1.md) — 宝塔API白名单过期排查 + DNS列表分页修复(阿里云API默认20→72条) - [会话 2026-06-21 #2](session-20260621-2.md) — DNS解析API从10.1.1.160迁移至101.132.183.138:32210,Java后端改指新地址 - [会话 2026-06-21 #1](session-20260621-1.md) — 宝塔面板API接入,Nginx反代管理迁移至宝塔(只读),160 nginx废弃,前端只读改造 - [会话 2026-06-19 #1](session-20260619-1.md) — 审计字段全栈实现:创建人/更新人/时间 + 排序 + DNS本地审计表 + 数据库迁移 + 部署 diff --git a/memory/session-20260716-1.md b/memory/session-20260716-1.md index 74a3993..20ba48f 100644 --- a/memory/session-20260716-1.md +++ b/memory/session-20260716-1.md @@ -1,6 +1,6 @@ --- name: session-20260716-1 -description: 2026-07-16 第1次会话 — 宝塔API返回HTML错误排查(IP白名单变更) +description: 2026-07-16 第1次会话 — 宝塔API返回HTML排查(IP白名单)+ DNS列表分页修复(20→72条) metadata: type: session date: 2026-07-16 @@ -56,6 +56,15 @@ metadata: - API Key: ahv5RRcYm3Vi2PzEFvqYsZvsS8LeGkYp - ⚠️ IP 白名单需要与 10.1.1.170 实际出公网 IP 保持一致 +### 4. DNS 记录列表只返回 20 条修复 +- **现象**: `GET /api/dns/records?zone=zgitm.com` 只返回 20 条记录 +- **调用链路**: Vue前端 → Java后端 → Python DNS API(101.132.183.138:32210) → 阿里云 DescribeDomainRecords API +- **根因**: `dns-api/dns_service.py` 的 `list_records()` 调用阿里云 API 时未传 `PageSize` 参数,默认仅返回 20 条 +- **修复**: 新增分页循环逻辑,`PageSize=100`,逐页拉取直到取完全部 `TotalCount` 条 +- **改动文件**: `dns-api/dns_service.py` → 已部署到 101.132.183.138:/opt/dns-api/dns_service.py +- **验证**: 修复前 20 条 → 修复后 72 条 +- **部署命令**: `scp` 上传 + `systemctl restart dns-api`(138 SSH 已免密) + ## 改进建议 - [ ] 考虑添加健康检查端点,主动监控宝塔 API 连通性 - [ ] 考虑在 `BTPanelApiClient` 中增加响应 Content-Type 检测,当返回 HTML 时给出更友好的错误提示(而非 `HttpMessageConverter` 的底层错误) diff --git a/nginx-manager-backend/Dockerfile b/nginx-manager-backend/Dockerfile index ca6e8dd..b31530e 100644 --- a/nginx-manager-backend/Dockerfile +++ b/nginx-manager-backend/Dockerfile @@ -2,4 +2,5 @@ FROM harbor.zgitm.com/library/eclipse-temurin:17-jre WORKDIR /app COPY target/*.jar app.jar EXPOSE 32402 -ENTRYPOINT ["java","-jar","app.jar"] \ No newline at end of file +#ENTRYPOINT ["java","-jar","app.jar"] +ENTRYPOINT ["java","-Xms256m","-Xmx512m","-XX:+UseG1GC","-XX:MaxGCPauseMillis=200","-XX:+HeapDumpOnOutOfMemoryError","-XX:HeapDumpPath=/app/dump.hprof","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=Asia/Shanghai","-jar","app.jar"] \ No newline at end of file