Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 110268 111686 get questionnaire order periodically #7153

Conversation

arafubeatbox
Copy link
Contributor

@arafubeatbox arafubeatbox commented Dec 24, 2022

review task: https://redmine.weseek.co.jp/issues/112130

実装内容

  • 指定時間に cron job 実行
  • 指定した時間以内に cron job 内で growi-questionnaire にリクエスト

備考

  • 一旦方針確認をしたいので、テストはその後に書きます。

  • weseek/growi にブランチ作成をすることができなかったので、collaborator ヘの追加、もしくは topic branch (feat/questionnaire など) の作成をお願いしてもよろしいでしょうか。一旦自分の fork から、master への draft PR で出しています。

@@ -138,6 +138,7 @@
"next-superjson": "^0.0.4",
"next-themes": "^0.2.0",
"nocache": "^3.0.1",
"node-cron": "^3.0.2",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

node 内の cron job 実行のために追加しました。
LICENSE 的に使って大丈夫だと思っています。

THIRD-PARTY-NOTICES はほぼ武井さんしかいじっていなかったので一旦いじりませんでした。

@hakumizuki hakumizuki changed the base branch from master to feat/questionnaire January 4, 2023 10:02
@hakumizuki hakumizuki changed the title Feat/110268 111686 get questionnaire order periodically feat: 110268 111686 get questionnaire order periodically Jan 5, 2023
Comment on lines 5 to 11
const getRandomInt = (min: number, max: number): number => {
const minInt = Math.ceil(min);
const maxInt = Math.floor(max);
return Math.floor(Math.random() * (maxInt - minInt) + minInt);
};

const sleep = msec => new Promise(resolve => setTimeout(resolve, msec));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

どっかの /utils あたりにファイル作って移動したいです

@@ -646,6 +646,24 @@ const ENV_VAR_NAME_TO_CONFIG_INFO = {
type: ValueType.STRING,
default: null,
},
GROWI_QUESTIONNAIRE_URI: {
ns: 'crowi',
key: 'app:growiQuestionnaireUri',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GROWI_QUESTIONNAIRE_SERVER_ORIGIN の方が直接的でいいかなと思います

Comment on lines 22 to 26
constructor(crowi) {
this.growiQuestionnaireUri = crowi.configManager?.getConfig('crowi', 'app:growiQuestionnaireUri');
this.cronSchedule = crowi.configManager?.getConfig('crowi', 'app:questionnaireCronSchedule');
this.maxHoursUntilRequest = crowi.configManager?.getConfig('crowi', 'app:questionnaireCronMaxHoursUntilRequest');
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

今回の場合は環境変数でしか設定値を変更しないので大丈夫なのですが、コンストラクタで設定値を初期化してしまうと、設定値を UI 上で変更可能にした場合などに対応できなくなってしまうので、使う時に取得するのがいいかと思います

await sleep(secToSleep * 1000);

try {
const response = await axios.get(`${this.growiQuestionnaireUri}/questionnaire-order/index`);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

axios-retry を使うと簡単にリトライできるので、もし余裕あれば変更お願いします。既に GROWI で使われてます

https://www.npmjs.com/package/axios-retry

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

softonic/axios-retry#159
custom axios instance を使おうとするとエラーが起こるみたいで、growi で現在使われている場所と同じく、default の axios を使うようにしました。

const client = require('axios').default;

@arafubeatbox arafubeatbox marked this pull request as ready for review January 6, 2023 01:00
@hakumizuki hakumizuki merged commit e981eb4 into weseek:feat/questionnaire Jan 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants