Skip to content

Commit 1262342

Browse files
Wangwb-ranchengebj
authored andcommitted
[fix][cloudkitty]Add code for optimized download rating PDF file
1 parent d67cd30 commit 1262342

File tree

5 files changed

+26
-11
lines changed

5 files changed

+26
-11
lines changed

dingo_command/api/cloudkitty.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from typing import List
44

55
from fastapi.responses import FileResponse
6+
from urllib.parse import unquote
67
from starlette.background import BackgroundTask
78
from dingo_command.api.model.cloudkitty import CloudKittyRatingSummaryDetail
89
from dingo_command.services.cloudkitty import CloudKittyService
@@ -56,7 +57,7 @@ async def download_rating_summary_execl(begin: str = Query(None, description="
5657
)
5758
raise HTTPException(status_code=400, detail="Execl file not found")
5859

59-
@router.post("/cloudkitty/download/ratingSummaryDetail/pdf", summary="下载计费汇总详情PDF", description="下载计费汇总详情PDF")
60+
@router.post("/cloudkitty/download/ratingSummaryDetail/pdf/preprocessing", summary="预处理下载计费汇总详情需要的PDF文件", description="预处理下载计费汇总详情需要的PDF文件")
6061
async def download_rating_summary_detail_pdf(detail: List[CloudKittyRatingSummaryDetail],
6162
language: str = Query(None, description="当前环境语言")):
6263
result_file_pdf_name = "rating_summary_detail_" + format_d8q_timestamp() + ".pdf"
@@ -66,18 +67,22 @@ async def download_rating_summary_detail_pdf(detail: List[CloudKittyRatingSummar
6667
# 1. 生成PDF文件
6768
try:
6869
cloudkitty_service.download_rating_summary_detail_pdf(result_file_pdf_path, detail, language)
70+
return os.path.basename(result_file_pdf_path)
6971
except Exception as e:
7072
import traceback
7173
traceback.print_exc()
7274
file_utils.cleanup_temp_file(result_file_pdf_path)
7375
raise HTTPException(status_code=400, detail="generate pdf file error")
7476

77+
@router.get("/cloudkitty/download/ratingSummaryDetail/pdf", summary="下载计费汇总详情PDF", description="下载计费汇总详情PDF")
78+
async def download_rating_summary_detail_pdf(filePath: str = Query(None, description="下载PDF文件名称")):
7579
# 文件存在则下载
76-
if os.path.exists(result_file_pdf_path):
80+
result_file_pdf_path = EXCEL_TEMP_DIR + unquote(filePath)
81+
if filePath is not None and os.path.exists(result_file_pdf_path):
7782
return FileResponse(
7883
path=result_file_pdf_path,
7984
media_type="application/octet-stream",
80-
filename=result_file_pdf_name, # 下载时显示的文件名
85+
filename=unquote(filePath), # 下载时显示的文件名
8186
background=BackgroundTask(file_utils.cleanup_temp_file, result_file_pdf_path)
8287
)
8388
raise HTTPException(status_code=400, detail="PDf file not found")

dingo_command/api/model/cloudkitty.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ class FlavorObject(BaseModel):
1111

1212
class CloudKittyRatingSummaryDetail(BaseModel):
1313
service: Optional[str] = Field(None, description="服务类型")
14-
tenant_id: Optional[str] = Field(None, description="租户ID")
14+
tenant_id: Optional[str] = Field(None, description="项目ID")
15+
tenant_name: Optional[str] = Field(None, description="项目名称")
1516
end: Optional[str] = Field(None, description="结束时间")
1617
total: Optional[str] = Field(None, description="总计")
1718
flavor: Optional[List[FlavorObject]] = Field(None, description="描述信息")

dingo_command/common/cloudkitty_client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import json
22
import uuid
33
from datetime import datetime, timedelta
4+
from oslo_utils import timeutils
45
from functools import wraps
56

67
import requests
@@ -46,7 +47,7 @@ def _is_token_valid(cls):
4647
print(f"cloudkitty client single instance id: {instance._singleton_instance_uuid}, token[{instance._current_token}]无效,token过期阈值:{cls.TOKEN_EXPIRY_THRESHOLD}")
4748
return False
4849

49-
remaining_time = instance._token_expiry - datetime.utcnow()
50+
remaining_time = instance._token_expiry - timeutils.utcnow()
5051
#print(f"cloudkitty client single instance id: {instance._singleton_instance_uuid}, token[{instance._current_token}]剩余时间:{remaining_time}, token过期阈值:{cls.TOKEN_EXPIRY_THRESHOLD}, 当前token是否有效:{remaining_time > cls.TOKEN_EXPIRY_THRESHOLD}")
5152
return remaining_time > cls.TOKEN_EXPIRY_THRESHOLD
5253

dingo_command/common/ironic_client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# self.region_name = region_name
33
import uuid
44
from datetime import datetime, timedelta
5+
from oslo_utils import timeutils
56
from functools import wraps
67
import requests
78

@@ -47,7 +48,7 @@ def _is_token_valid(cls):
4748
print(f"ironic client single instance id: {instance._singleton_instance_uuid}, token[{instance._current_token}]无效,token过期阈值:{cls.TOKEN_EXPIRY_THRESHOLD}")
4849
return False
4950

50-
remaining_time = instance._token_expiry - datetime.utcnow()
51+
remaining_time = instance._token_expiry - timeutils.utcnow()
5152
#print(f"ironic client single instance id: {instance._singleton_instance_uuid}, token[{instance._current_token}]剩余时间:{remaining_time}, token过期阈值:{cls.TOKEN_EXPIRY_THRESHOLD}, 当前token是否有效:{remaining_time > cls.TOKEN_EXPIRY_THRESHOLD}")
5253
return remaining_time > cls.TOKEN_EXPIRY_THRESHOLD
5354

dingo_command/services/cloudkitty.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,17 @@ def generate_rating_summary_detail_data(self, ratingSummaryDetailList, language)
166166
temp_data = []
167167
# 项目ID
168168
tenant_id = None if ratingSummaryDetailList is None else ratingSummaryDetailList[0].tenant_id
169+
tenant_name = None if ratingSummaryDetailList is None else ratingSummaryDetailList[0].tenant_name
169170
if language is None or language == "EN":
170-
temp_data.append({'Tenant ID': tenant_id})
171+
if tenant_name is None:
172+
temp_data.append({'Tenant ID': tenant_id})
173+
else:
174+
temp_data.append({'Tenant Name': tenant_name})
171175
else:
172-
temp_data.append({'项目ID':tenant_id})
176+
if tenant_name is None:
177+
temp_data.append({'项目ID':tenant_id})
178+
else:
179+
temp_data.append({'项目名称':tenant_name})
173180
# 开始时间
174181
begin_datatime = None if ratingSummaryDetailList is None or ratingSummaryDetailList[0].flavor is None \
175182
or ratingSummaryDetailList[0].flavor is None or ratingSummaryDetailList[0].flavor[0] is None \
@@ -209,11 +216,11 @@ def generate_rating_summary_detail_data(self, ratingSummaryDetailList, language)
209216
temp_instance_flavor_data.append({'instance':ratingSummaryDetail.total})
210217
if ratingSummaryDetail.flavor is not None:
211218
if language is None or language == "EN":
212-
temp_instance_flavor_data.append({'VM Type': 'Rate'})
219+
temp_instance_flavor_data.append({' VM Type': 'Rate'})
213220
else:
214-
temp_instance_flavor_data.append({'云主机类型': '费率'})
221+
temp_instance_flavor_data.append({' 云主机类型': '费率'})
215222
for flavor in ratingSummaryDetail.flavor:
216-
temp_instance_flavor_data.append({flavor.flavor_name: flavor.rate})
223+
temp_instance_flavor_data.append({" " + flavor.flavor_name: flavor.rate})
217224
else:
218225
temp_non_instance_data.append({ratingSummaryDetail.service:ratingSummaryDetail.total})
219226

0 commit comments

Comments
 (0)