工作流操作 -奇异果体育app竞彩官网下载
更新时间:2019-08-07
workflow即媒资处理工作流,由stage以及stage的依赖关系构成;workflow名称在单个用户下具有唯一性,即用户创建的工作流名称不能重复。
新建工作流
创建工作流需要构建工作流内的stage和stage的依赖关系。使用如下代码可以新建工作流,代码中给出了创建一个简单工作流和复杂工作流的方法。
private void createworkflow(bvwclient client) {
client.createworkflow(createsimpleworkflowrequest("simple_workflow"));
client.createworkflow(createcomplexworkflowrequest("complex_workflow"));
}
// 创建一个简单的工作流
private workflowcreaterequest createsimpleworkflowrequest(string workflowname) {
// 创建开始节点(start stage)
stageparammodel startstageparam = stageparammodel.of("{}");
stagemodel startstage = stagemodel.of("start", startstageparam, stagetype.start);
// 创建转码节点(transcoding stage)
stageparammodel transcodingstageparam = stageparammodel.of(
"{\"job\":{\"pipelinename\":\"test_transcoding\",\"source\":{},\"target\":{\"presetname\":"
"\"bvwtest\",\"targetbucket\":\"videoworks-source\"}},\"needdetectblackboard\":true,"
"\"adjustorientation\":\"all\"}");
stagemodel transcodingstage = stagemodel.of("transcoding", transcodingstageparam,
stagetype.transcoding);
// 创建发布节点(publish stage)
stageparammodel publishstageparam = stageparammodel.of("{}");
stagemodel publishstage = stagemodel.of("publish", publishstageparam, stagetype.publish);
// 设置节点
map<string, stagemodel> stages = maps.newhashmap();
stages.put(startstage.getname(), startstage);
stages.put(transcodingstage.getname(), transcodingstage);
stages.put(publishstage.getname(), publishstage);
// 设置节点依赖关系
map<string, list<string>> dependencies = maps.newhashmap();
dependencies.put(startstage.getname(), lists.newarraylist(transcodingstage.getname());
dependencies.put(transcodingstage.getname(), lists.newarraylist(publishstage.getname()));
dependencies.put(publishstage.getname(), lists.newarraylist());
// 构建workflowcreaterequest
dagmodel dag = dagmodel.of(stages, dependencies);
return workflowcreaterequest.of(workflowname, dag);
}
// 创建一个复杂的工作流
private workflowcreaterequest createcomplexworkflowrequest(string workflowname) {
// 创建开始节点(start stage)
stageparammodel startstageparam = stageparammodel.of("{}");
stagemodel startstage = stagemodel.of("start", startstageparam, stagetype.start);
// 创建元信息提取节点(mediainfo stage)
stageparammodel mediainfostageparam = stageparammodel.of("{}");
stagemodel mediainfostage = stagemodel.of("mediainfo", mediainfostageparam, stagetype.mediainfo);
// 创建黑边检测节点(blackborder stage)
stageparammodel blackborderdetectstageparam = stageparammodel.of("{}");
stagemodel blackborderdetectstage = stagemodel.of("blackborderdetect", blackborderdetectstageparam,
stagetype.black_border_detect);
// 创建转码节点(transcoding stage)
stageparammodel transcodingstageparam = stageparammodel.of(
"{\"job\":{\"pipelinename\":\"test_transcoding\",\"source\":{},\"target\":{\"presetname\":"
"\"bvwtest\",\"targetbucket\":\"videoworks-source\"}},\"needdetectblackboard\":true,"
"\"adjustorientation\":\"all\"}");
stagemodel transcodingstage = stagemodel.of("transcoding", transcodingstageparam,
stagetype.transcoding);
// 创建缩略图节点(thumbnail stage)
stageparammodel thumbnailstageparam = stageparammodel.of(
"{\"notificationname\":\"test\",\"job\":{\"pipelinename\":\"test_thumbnail\",\"target\":"
"{\"targetbucket\":\"videoworks-source\",\"format\":\"jpg\",\"sizingpolicy\":\"keep\"},"
"\"capture\":{\"mode\":\"auto\"}}}");
stagemodel thumbnailstage = stagemodel.of("thumbnail", thumbnailstageparam, stagetype.thumbnail);
// 创建发布节点(publish stage)
stageparammodel publishstageparam = stageparammodel.of("{}");
stagemodel publishstage = stagemodel.of("publish", publishstageparam, stagetype.publish);
// 设置节点
map<string, stagemodel> stages = maps.newhashmap();
stages.put(startstage.getname(), startstage);
stages.put(mediainfostage.getname(), mediainfostage);
stages.put(blackborderdetectstage.getname(), blackborderdetectstage);
stages.put(transcodingstage.getname(), transcodingstage);
stages.put(thumbnailstage.getname(), thumbnailstage);
stages.put(publishstage.getname(), publishstage);
// 设置节点依赖关系
map<string, list<string>> dependencies = maps.newhashmap();
dependencies.put(startstage.getname(), lists.newarraylist(blackborderdetectstage.getname(),
mediainfostage.getname(),
thumbnailstage.getname()));
dependencies.put(blackborderdetectstage.getname(), lists.newarraylist(transcodingstage.getname()));
dependencies.put(transcodingstage.getname(), lists.newarraylist(publishstage.getname()));
dependencies.put(mediainfostage.getname(), lists.newarraylist(publishstage.getname()));
dependencies.put(thumbnailstage.getname(), lists.newarraylist(publishstage.getname()));
dependencies.put(publishstage.getname(), lists.newarraylist());
// 构建workflowcreaterequest
dagmodel dag = dagmodel.of(stages, dependencies);
return workflowcreaterequest.of(workflowname, dag);
}
- 创建工作流的stage时,每个stage的参数信息都是json序列化的字符串,字符串的内容可以参考videoworks服务的控制台界面的媒资列表页面——媒资执行实例——任务结果信息的输入信息。如下图是一个转码节点的输入。
- 工作流的stage信息和stage依赖信息中的每个stage名称需要一一对应,否则创建工作流将失败。
删除工作流
使用如下代码可以删除指定名称的工作流。
private void deleteworkflow(bvwclient client, string workflowname) {
client.deleteworkflow(workflowname);
}
只有没有被媒资处理使用的工作流可以删除,否则将报错400,"workflow is using, can not modify"。
更新工作流
使用如下代码可以更新工作流的stage信息。
private void updateworkflow(bvwclient client) {
client.updateworkflow(updateworkflowrequest("update_workflow"));
}
// 创建更新的工作流请求
private workflowupdaterequest updateworkflowrequest(string workflowname) {
// 创建开始节点(start stage)
stageparammodel startstageparam = stageparammodel.of("{}");
stagemodel startstage = stagemodel.of("start", startstageparam, stagetype.start);
// 创建转码节点(transcoding stage)
stageparammodel transcodingstageparam = stageparammodel.of(
"{\"job\":{\"pipelinename\":\"test_transcoding\",\"source\":{},\"target\":{\"presetname\":"
"\"bvwtest\",\"targetbucket\":\"videoworks-source\"}},\"needdetectblackboard\":true,"
"\"adjustorientation\":\"all\"}");
stagemodel transcodingstage = stagemodel.of("transcoding", transcodingstageparam,
stagetype.transcoding);
// 创建发布节点(publish stage)
stageparammodel publishstageparam = stageparammodel.of("{}");
stagemodel publishstage = stagemodel.of("publish", publishstageparam, stagetype.publish);
// 设置节点
map<string, stagemodel> stages = maps.newhashmap();
stages.put(startstage.getname(), startstage);
stages.put(transcodingstage.getname(), transcodingstage);
stages.put(publishstage.getname(), publishstage);
// 设置节点依赖关系
map<string, list<string>> dependencies = maps.newhashmap();
dependencies.put(startstage.getname(), lists.newarraylist(transcodingstage.getname()));
dependencies.put(transcodingstage.getname(), lists.newarraylist(publishstage.getname()));
dependencies.put(publishstage.getname(), lists.<string>newarraylist());
// 构建workflowcreaterequest
dagmodel dag = dagmodel.of(stages, dependencies);
return workflowupdaterequest.of(workflowname, dag);
}
只有没有被媒资处理使用的工作流才允许更新,否则将报错400,"workflow is using, can not modify"。
查询工作流
使用如下代码可以查询一个工作流。
private void getworkflow(bvwclient client, string workflowname) {
client.getworkflow(workflowname);
}
查询工作流列表
使用如下代码可以查询工作流列表。
private void listworkflow(bvwclient client) {
int pageno = 1;
int pagesize = 10;
string begin = "2019-06-30t16:00:00z";
string end = "2019-07-30t16:00:00z";
string workflownamefuzzy = "test";
workflowlistrequest request = workflowlistrequest.of(pageno, pagesize, workflowstatus.normal,
workflownamefuzzy, begin, end);
listbypageresponse<workflowlistresponse> response = client.listworkflow(request);
}
查询工作流列表的参数只有pageno和pagesize是必选项,其他参数为可选项。
启用工作流
使用如下代码可以启用一个工作流。
private void enableworkflow(bvwclient client, string workflowname) {
client.enableworkflow(workflowname);
}
禁用工作流
使用如下代码可以禁用一个工作流。
private void disableworkflow(bvwclient client, string workflowname) {
client.disableworkflow(workflowname);
}