|
1 | 1 | const schedule = require('node-schedule');
|
| 2 | +var AsyncLock = require('async-lock'); |
2 | 3 | const projectModel = require('models/project.js');
|
3 | 4 | const oauthModel = require('../model/oauthModel.js');
|
4 | 5 | const yapi = require('yapi.js');
|
5 | 6 | const jobMap = new Map();
|
6 | 7 |
|
| 8 | +var lock = new AsyncLock({timeout: 5000}); |
| 9 | + |
7 | 10 | class syncTokenUtils {
|
8 | 11 | constructor(ctx) {
|
9 | 12 | yapi.commons.log(
|
@@ -117,44 +120,50 @@ class syncTokenUtils {
|
117 | 120 | 'token更新定时器触发, getTokenUrl:' + oauthData.get_token_url
|
118 | 121 | );
|
119 | 122 | //对定时任务存在的必要性做判断
|
120 |
| - let projectData; |
121 |
| - try { |
122 |
| - projectData = await this.preRefresh(oauthData); |
123 |
| - } catch (e) { |
124 |
| - return; |
125 |
| - } |
| 123 | + lock.acquire(oauthData.project_id, async function(done) { |
| 124 | + let projectData; |
| 125 | + try { |
| 126 | + projectData = await this.preRefresh(oauthData); |
| 127 | + } catch (e) { |
| 128 | + return; |
| 129 | + } |
126 | 130 |
|
127 |
| - let projectId = projectData._id; |
128 |
| - let getTokenUrl = oauthData.get_token_url; |
129 |
| - let method = oauthData.request_type; |
130 |
| - let headers_data = oauthData.headers_data; |
131 |
| - let result; |
132 |
| - try { |
133 |
| - if (method === 'GET') { |
134 |
| - let params = oauthData.params; |
135 |
| - result = await this.execGetToken(getTokenUrl, method, headers_data, params); |
136 |
| - } else { |
137 |
| - let dataType = oauthData.dataType; |
138 |
| - let formData = oauthData.form_data; |
139 |
| - let dataJson = oauthData.data_json; |
140 |
| - result = await this.execGetToken( |
141 |
| - getTokenUrl, |
142 |
| - method, |
143 |
| - headers_data, |
144 |
| - formData, |
145 |
| - dataJson, |
146 |
| - dataType |
147 |
| - ); |
| 131 | + let projectId = projectData._id; |
| 132 | + let getTokenUrl = oauthData.get_token_url; |
| 133 | + let method = oauthData.request_type; |
| 134 | + let headers_data = oauthData.headers_data; |
| 135 | + let result; |
| 136 | + try { |
| 137 | + if (method === 'GET') { |
| 138 | + let params = oauthData.params; |
| 139 | + result = await this.execGetToken(getTokenUrl, method, headers_data, params); |
| 140 | + } else { |
| 141 | + let dataType = oauthData.dataType; |
| 142 | + let formData = oauthData.form_data; |
| 143 | + let dataJson = oauthData.data_json; |
| 144 | + result = await this.execGetToken( |
| 145 | + getTokenUrl, |
| 146 | + method, |
| 147 | + headers_data, |
| 148 | + formData, |
| 149 | + dataJson, |
| 150 | + dataType |
| 151 | + ); |
| 152 | + } |
| 153 | + let accessToken = this.getTokenByPath(result, oauthData.token_path); |
| 154 | + //更新到对应的env上; |
| 155 | + await this.updateProjectToken(accessToken, oauthData, projectData); |
| 156 | + this.saveSyncLog(0, '环境:【' + oauthData.env_name + '】更新新的token【' + accessToken + '】成功', '1', projectId); |
| 157 | + yapi.commons.log('环境:【' + oauthData.env_name + '】更新token成功'); |
| 158 | + done(); |
| 159 | + } catch (e) { |
| 160 | + this.saveSyncLog(-1, '环境:【' + oauthData.env_name + '】数据格式出错,请检查', '1', projectId); |
| 161 | + yapi.commons.log('环境:【' + oauthData.env_name + '】获取数据失败' + e.message); |
| 162 | + done(); |
148 | 163 | }
|
149 |
| - let accessToken = this.getTokenByPath(result, oauthData.token_path); |
150 |
| - //更新到对应的env上; |
151 |
| - await this.updateProjectToken(accessToken, oauthData, projectData); |
152 |
| - this.saveSyncLog(0, '环境:【' + oauthData.env_name + '】更新新的token【' + accessToken + '】成功', '1', projectId); |
153 |
| - yapi.commons.log('环境:【' + oauthData.env_name + '】更新token成功'); |
154 |
| - } catch (e) { |
155 |
| - this.saveSyncLog(-1, '环境:【' + oauthData.env_name + '】数据格式出错,请检查', '1', projectId); |
156 |
| - yapi.commons.log('环境:【' + oauthData.env_name + '】获取数据失败' + e.message); |
157 |
| - } |
| 164 | + }, function(err, ret) { |
| 165 | + yapi.commons.log('更新 token 失败,' + err.message); |
| 166 | + }, {}); |
158 | 167 | }
|
159 | 168 |
|
160 | 169 | /**
|
|
0 commit comments