Commit 5a182d17 authored by nano's avatar nano

use Queue

parent f5212323
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="f0cbce64-0ebc-4f60-8c2d-2fe9e214a8c0" name="Default" comment=""> <list default="true" id="f0cbce64-0ebc-4f60-8c2d-2fe9e214a8c0" name="Default" comment="">
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/package/main.ts" afterPath="$PROJECT_DIR$/package/main.ts" /> <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/serives/Queue.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/upload.ts" afterPath="$PROJECT_DIR$/src/routes/upload.ts" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/upload.ts" afterPath="$PROJECT_DIR$/src/routes/upload.ts" />
</list> </list>
<ignored path="mycard-console-backend.iws" /> <ignored path="mycard-console-backend.iws" />
...@@ -33,7 +34,7 @@ ...@@ -33,7 +34,7 @@
<entry file="file://$PROJECT_DIR$/migrate.ts"> <entry file="file://$PROJECT_DIR$/migrate.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="353"> <state relative-caret-position="353">
<caret line="128" column="22" lean-forward="true" selection-start-line="128" selection-start-column="22" selection-end-line="128" selection-end-column="22" /> <caret line="128" column="22" lean-forward="false" selection-start-line="128" selection-start-column="22" selection-end-line="128" selection-end-column="22" />
<folding> <folding>
<element signature="e#0#26#0" expanded="true" /> <element signature="e#0#26#0" expanded="true" />
</folding> </folding>
...@@ -45,7 +46,7 @@ ...@@ -45,7 +46,7 @@
<entry file="file://$PROJECT_DIR$/server.ts"> <entry file="file://$PROJECT_DIR$/server.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-320"> <state relative-caret-position="-320">
<caret line="31" column="7" lean-forward="true" selection-start-line="31" selection-start-column="7" selection-end-line="31" selection-end-column="7" /> <caret line="31" column="7" lean-forward="false" selection-start-line="31" selection-start-column="7" selection-end-line="31" selection-end-column="7" />
<folding /> <folding />
</state> </state>
</provider> </provider>
...@@ -66,8 +67,8 @@ ...@@ -66,8 +67,8 @@
<file leaf-file-name="upload.ts" pinned="false" current-in-tab="true"> <file leaf-file-name="upload.ts" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/routes/upload.ts"> <entry file="file://$PROJECT_DIR$/src/routes/upload.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="342"> <state relative-caret-position="151">
<caret line="19" column="0" lean-forward="true" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" /> <caret line="155" column="43" lean-forward="true" selection-start-line="155" selection-start-column="43" selection-end-line="155" selection-end-column="43" />
<folding> <folding>
<element signature="e#0#28#0" expanded="true" /> <element signature="e#0#28#0" expanded="true" />
</folding> </folding>
...@@ -75,6 +76,16 @@ ...@@ -75,6 +76,16 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="Queue.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/serives/Queue.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-51">
<caret line="11" column="3" lean-forward="true" selection-start-line="11" selection-start-column="3" selection-end-line="11" selection-end-column="3" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf> </leaf>
</component> </component>
<component name="FileTemplateManagerImpl"> <component name="FileTemplateManagerImpl">
...@@ -88,7 +99,6 @@ ...@@ -88,7 +99,6 @@
</component> </component>
<component name="FindInProjectRecents"> <component name="FindInProjectRecents">
<findStrings> <findStrings>
<find>author</find>
<find>paent</find> <find>paent</find>
<find>parent</find> <find>parent</find>
<find>tags</find> <find>tags</find>
...@@ -118,6 +128,7 @@ ...@@ -118,6 +128,7 @@
<find>console.log</find> <find>console.log</find>
<find>fs</find> <find>fs</find>
<find>fs.</find> <find>fs.</find>
<find>close</find>
</findStrings> </findStrings>
</component> </component>
<component name="Git.Settings"> <component name="Git.Settings">
...@@ -163,6 +174,7 @@ ...@@ -163,6 +174,7 @@
<option value="$PROJECT_DIR$/migrate.ts" /> <option value="$PROJECT_DIR$/migrate.ts" />
<option value="$PROJECT_DIR$/package/main.ts" /> <option value="$PROJECT_DIR$/package/main.ts" />
<option value="$PROJECT_DIR$/src/utils.ts" /> <option value="$PROJECT_DIR$/src/utils.ts" />
<option value="$PROJECT_DIR$/src/serives/download.ts" />
<option value="$PROJECT_DIR$/src/routes/upload.ts" /> <option value="$PROJECT_DIR$/src/routes/upload.ts" />
</list> </list>
</option> </option>
...@@ -234,6 +246,24 @@ ...@@ -234,6 +246,24 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="serives" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH> <PATH>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="moecube-console" /> <option name="myItemId" value="moecube-console" />
...@@ -441,12 +471,12 @@ ...@@ -441,12 +471,12 @@
<workItem from="1493198225466" duration="47067000" /> <workItem from="1493198225466" duration="47067000" />
<workItem from="1493371982129" duration="6000" /> <workItem from="1493371982129" duration="6000" />
<workItem from="1493372010655" duration="3472000" /> <workItem from="1493372010655" duration="3472000" />
<workItem from="1493692283332" duration="12870000" /> <workItem from="1493692283332" duration="14470000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="214641000" /> <option name="totallyTimeSpent" value="216241000" />
</component> </component>
<component name="TodoView"> <component name="TodoView">
<todo-panel id="selected-file"> <todo-panel id="selected-file">
...@@ -459,6 +489,7 @@ ...@@ -459,6 +489,7 @@
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="55" y="23" width="1377" height="872" extended-state="0" /> <frame x="55" y="23" width="1377" height="872" extended-state="0" />
<editor active="true" />
<layout> <layout>
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="DB Browser" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="DB Browser" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
...@@ -466,7 +497,7 @@ ...@@ -466,7 +497,7 @@
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" /> <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.43941605" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.43941605" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32975295" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32975295" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.31794873" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.31794873" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="TypeScript" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32820514" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="TypeScript" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32820514" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.14011799" sideWeight="0.49384886" order="0" side_tool="false" content_ui="combo" /> <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.14011799" sideWeight="0.49384886" order="0" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32846716" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32846716" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
...@@ -552,13 +583,6 @@ ...@@ -552,13 +583,6 @@
<watches-manager /> <watches-manager />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/node_modules/@types/koa/index.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-5396">
<caret line="337" column="12" lean-forward="false" selection-start-line="337" selection-start-column="12" selection-end-line="337" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/iridium/dist/lib/Decorators.d.ts"> <entry file="file://$PROJECT_DIR$/node_modules/iridium/dist/lib/Decorators.d.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="192"> <state relative-caret-position="192">
...@@ -823,7 +847,7 @@ ...@@ -823,7 +847,7 @@
<entry file="file://$PROJECT_DIR$/server.ts"> <entry file="file://$PROJECT_DIR$/server.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-320"> <state relative-caret-position="-320">
<caret line="31" column="7" lean-forward="true" selection-start-line="31" selection-start-column="7" selection-end-line="31" selection-end-column="7" /> <caret line="31" column="7" lean-forward="false" selection-start-line="31" selection-start-column="7" selection-end-line="31" selection-end-column="7" />
<folding /> <folding />
</state> </state>
</provider> </provider>
...@@ -841,7 +865,7 @@ ...@@ -841,7 +865,7 @@
<entry file="file://$PROJECT_DIR$/migrate.ts"> <entry file="file://$PROJECT_DIR$/migrate.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="353"> <state relative-caret-position="353">
<caret line="128" column="22" lean-forward="true" selection-start-line="128" selection-start-column="22" selection-end-line="128" selection-end-column="22" /> <caret line="128" column="22" lean-forward="false" selection-start-line="128" selection-start-column="22" selection-end-line="128" selection-end-column="22" />
<folding> <folding>
<element signature="e#0#26#0" expanded="true" /> <element signature="e#0#26#0" expanded="true" />
</folding> </folding>
...@@ -872,10 +896,18 @@ ...@@ -872,10 +896,18 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/serives/Queue.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-51">
<caret line="11" column="3" lean-forward="true" selection-start-line="11" selection-start-column="3" selection-end-line="11" selection-end-column="3" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/upload.ts"> <entry file="file://$PROJECT_DIR$/src/routes/upload.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="342"> <state relative-caret-position="151">
<caret line="19" column="0" lean-forward="true" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" /> <caret line="155" column="43" lean-forward="true" selection-start-line="155" selection-start-column="43" selection-end-line="155" selection-end-column="43" />
<folding> <folding>
<element signature="e#0#28#0" expanded="true" /> <element signature="e#0#28#0" expanded="true" />
</folding> </folding>
......
...@@ -12,13 +12,13 @@ import {mongodb} from '../models/Iridium'; ...@@ -12,13 +12,13 @@ import {mongodb} from '../models/Iridium';
import {toObjectID} from 'iridium'; import {toObjectID} from 'iridium';
import config from '../../config'; import config from '../../config';
import {UploadOSS} from '../utils'; import {UploadOSS} from '../utils';
import Queue from '../serives/Queue';
import Router = require('koa-router'); import Router = require('koa-router');
const downloader = new Aria2; const downloader = new Aria2;
let DownloadQueue = new Queue;
downloader.open(); downloader.open();
const checkFilePath = async (file) => { const checkFilePath = async (file) => {
if (['.gz', '.rar', '.zip', '.7z'].indexOf(path.extname(file.path)) === -1) { if (['.gz', '.rar', '.zip', '.7z'].indexOf(path.extname(file.path)) === -1) {
console.log(file); console.log(file);
...@@ -153,68 +153,69 @@ const uploadPackageUrl = async (ctx: Context) => { ...@@ -153,68 +153,69 @@ const uploadPackageUrl = async (ctx: Context) => {
} }
// testUrl: https://r.my-card.in/release/dist/0c16a3ecb115fd7cf575ccdd64f62a8f3edc635b087950e4ed4f3f781972bbfd.tar.gz // testUrl: https://r.my-card.in/release/dist/0c16a3ecb115fd7cf575ccdd64f62a8f3edc635b087950e4ed4f3f781972bbfd.tar.gz
let pack = await mongodb.Packages.findOne({_id: toObjectID(ctx.request.body._id)}); DownloadQueue.run(async (ctx, _next) => {
if (!pack) { let pack = await mongodb.Packages.findOne({_id: toObjectID(ctx.request.body._id)});
return ctx.throw(400, 'pack not exists'); if (!pack) {
} return ctx.throw(400, 'pack not exists');
}
downloader.onDownloadStart = async () => {
pack!.status = 'uploading';
await pack!.save();
};
downloader.onDownloadStart = async () => { downloader.onDownloadComplete = async (m) => {
pack!.status = 'uploading'; const {files} = await downloader.send('tellStatus', m.gid);
await pack!.save(); const [file] = files;
};
downloader.onDownloadComplete = async (m) => { try {
const {files} = await downloader.send('tellStatus', m.gid);
const [file] = files;
try { await checkFilePath(file);
// 打包
const bundled = await bundle(path.basename(file.path));
await checkFilePath(file); // 打包完, 上传阿里云
// 打包 await UploadOSS(bundled.distPath);
const bundled = await bundle(path.basename(file.path));
// 打包完, 上传阿里云 Object.assign(pack, bundled);
await UploadOSS(bundled.distPath); pack!.status = 'uploaded';
Object.assign(pack, bundled); await mongodb.Packages.update({id: pack!.id}, {$set: {status: 'deprecated'}}, {multi: true});
pack!.status = 'uploaded'; await pack!.save();
await mongodb.Packages.update({id: pack!.id}, {$set: {status: 'deprecated'}}, {multi: true}); // 上传完,干掉本地目录
await pack!.save(); await fs.removeAsync(bundled.distPath);
_next();
} catch (e) {
console.trace(e);
pack!.status = 'failed';
_next();
await pack!.save();
}
};
// 上传完,干掉本地目录 downloader.onDownloadError = async (err) => {
await fs.removeAsync(bundled.distPath); // console.log(await downloader.send('tellStatus', err.gid))
} catch (e) {
console.trace(e);
pack!.status = 'failed'; pack!.status = 'failed';
await pack!.save(); await pack!.save();
} console.log(err);
await downloader.close() _next();
}; };
downloader.onDownloadError = async (err) => {
// console.log(await downloader.send('tellStatus', err.gid))
pack!.status = 'failed';
await pack!.save();
await downloader.close()
console.log(err);
};
ctx.body = await new Promise((resolve, reject) => {
ctx.body = await new Promise((resolve, reject) => { downloader.onmessage = m => {
if (m['error']) {
reject(m['error']);
} else {
resolve(m);
}
};
downloader.onmessage = m => { downloader.send('addUri', [ctx.request.body.url], {dir: config.upload_path});
if (m['error']) { });
reject(m['error']);
} else {
resolve(m);
}
};
downloader.send('addUri', [ctx.request.body.url], {dir: config.upload_path});
}); });
}; };
router.post('/v1/upload/image', UploadImage); router.post('/v1/upload/image', UploadImage);
......
export default class Queue {
running: number;
queue: Function[];
concurrency: number;
constructor() {
this.concurrency = 1;
this.running = 0;
this.queue = [];
}
set(args) {
return Object.assign(this, args);
}
run(task) {
this.queue.push(task);
this.next();
return this;
}
next() {
while (this.running < this.concurrency && this.queue.length) {
let task = this.queue.shift();
if (task) {
task(this, () => {
this.running--;
this.next();
});
this.running++;
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment