OMDSCloud/dictation_function/src/functions/analysisLicensesManualRetry.ts
maruyama.t 2b68a9f054 Merged PR 824: AzureFunctions実装3(CSVをストレージアカウントに配置する)
## 概要
[Task3846: AzureFunctions実装3(CSVをストレージアカウントに配置する)](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3846)

outputDataを追加
→outputAnalysisLicensesDataに変更(アラートルールなどでログを見るので、何の処理か理解できるように)
blobstorageService.tsに以下を追加
 - uploadFileAnalysisLicensesCSV
(ライセンスCSVを配置する)
- createContainerAnalysisを追加
(コンテナーを作成する)
環境変数の追加

## レビューポイント
- 今回追加されたJP-EASTのストレージアカウントのコンテナーが、第一階層のアカウントのものであるかどうかはソース上は特に意識していないが問題ないでしょうか。

## 動作確認状況
- ローカルで確認(モックでソース上処理が通ることのみ確認のみ)
詳細なテストは別タスクで行う。

## 補足
- 相談、参考資料などがあれば
2024-03-13 07:54:10 +00:00

77 lines
2.4 KiB
TypeScript

import {
HttpRequest,
HttpResponseInit,
InvocationContext,
app,
HttpMethod,
} from "@azure/functions";
import { analysisLicensesProcessing } from "./analysisLicenses";
import * as dotenv from "dotenv";
import { BlobstorageService } from "../blobstorage/blobstorage.service";
import { initializeDataSource } from "../database/initializeDataSource";
import { HTTP_METHODS, HTTP_STATUS_CODES } from "../constants";
export async function analysisLicensesManualRetry(
req: HttpRequest,
context: InvocationContext
): Promise<HttpResponseInit> {
context.log(req);
try {
if (req.method === HTTP_METHODS.POST) {
context.log("[IN]analysisLicensesManualRetry");
dotenv.config({ path: ".env" });
dotenv.config({ path: ".env.local", override: true });
const datasource = await initializeDataSource(context);
const blobstorageService = new BlobstorageService(true);
try {
// 現在の日付より、先月の年月をYYYYMM形式で取得
const currentDate = new Date();
currentDate.setMonth(currentDate.getMonth() - 1);
const year = currentDate.getFullYear();
const month = (currentDate.getMonth() + 1).toString().padStart(2, "0"); // 月は0から始まるため+1する
const formattedDate = `${year}${month}`;
await analysisLicensesProcessing(
context,
formattedDate,
datasource,
blobstorageService
);
return {
status: HTTP_STATUS_CODES.OK,
body: "analysisLicensesProcessing has been triggered.",
};
} catch (e) {
context.log("analysisLicensesProcessing failed.");
context.error(e);
throw e;
}
} else {
context.log(`Please use the POST method. method = [${req.method}]`);
return {
status: HTTP_STATUS_CODES.BAD_REQUEST,
body: `Please use the POST method. method = [${req.method}]`,
};
}
} catch (e) {
context.log("analysisLicensesManualRetry failed.");
context.error(e);
return {
status: HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,
body: "analysisLicensesManualRetry failed.",
};
} finally {
context.log("[OUT]analysisLicensesManualRetry");
}
}
// httpトリガは定時処理licenseAutoAllocationの異常時の手動再実行用
app.http("analysisLicensesManualRetry", {
methods: [HTTP_METHODS.POST as HttpMethod],
authLevel: "function",
handler: analysisLicensesManualRetry,
});