package dev.jianmu.application.service.internal;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import dev.jianmu.application.exception.DataNotFoundException;
import dev.jianmu.application.query.NodeDef;
import dev.jianmu.application.query.NodeDefApi;
import dev.jianmu.el.ElContext;
import dev.jianmu.event.Publisher;
import dev.jianmu.event.impl.WorkerDeferredResultClearEvent;
import dev.jianmu.infrastructure.GlobalProperties;
import dev.jianmu.infrastructure.storage.MonitoringFileService;
import dev.jianmu.infrastructure.worker.*;
import dev.jianmu.infrastructure.worker.event.TaskFailedEvent;
import dev.jianmu.infrastructure.worker.event.TaskFinishedEvent;
import dev.jianmu.infrastructure.worker.event.TaskRunningEvent;
import dev.jianmu.infrastructure.worker.unit.*;
import dev.jianmu.secret.aggregate.CredentialManager;
import dev.jianmu.secret.aggregate.KVPair;
import dev.jianmu.task.aggregate.InstanceParameter;
import dev.jianmu.task.aggregate.InstanceStatus;
import dev.jianmu.task.aggregate.TaskInstance;
import dev.jianmu.task.event.TaskInstanceCreatedEvent;
import dev.jianmu.task.repository.InstanceParameterRepository;
import dev.jianmu.task.repository.TaskInstanceRepository;
import dev.jianmu.task.repository.VolumeRepository;
import dev.jianmu.trigger.event.TriggerEvent;
import dev.jianmu.trigger.repository.TriggerEventRepository;
import dev.jianmu.worker.aggregate.Worker;
import dev.jianmu.worker.repository.WorkerRepository;
import dev.jianmu.workflow.aggregate.definition.Node;
import dev.jianmu.workflow.aggregate.definition.TaskParameter;
import dev.jianmu.workflow.aggregate.parameter.Parameter;
import dev.jianmu.workflow.aggregate.parameter.SecretParameter;
import dev.jianmu.workflow.aggregate.process.AsyncTaskInstance;
import dev.jianmu.workflow.aggregate.process.WorkflowInstance;
import dev.jianmu.workflow.el.EvaluationResult;
import dev.jianmu.workflow.el.Expression;
import dev.jianmu.workflow.el.ExpressionLanguage;
import dev.jianmu.workflow.repository.AsyncTaskInstanceRepository;
import dev.jianmu.workflow.repository.ParameterRepository;
import dev.jianmu.workflow.repository.WorkflowInstanceRepository;
import dev.jianmu.workflow.repository.WorkflowRepository;
import dev.jianmu.workflow.service.ParameterDomainService;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* @author Daihw
* @class WorkerInternalApplication
* @description WorkerInternalApplication
* @create 2022/5/27 10:46 上午
*/
@Slf4j
@Service
public class WorkerInternalApplication {
private static final Logger logger = LoggerFactory.getLogger(WorkerInternalApplication.class);
private final String optionScript = "set -e";
private final String traceScript = "\nset -x";
private final String script = "\n%s";
private final ParameterRepository parameterRepository;
private final ParameterDomainService parameterDomainService;
private final CredentialManager credentialManager;
private final NodeDefApi nodeDefApi;
private final WorkerRepository workerRepository;
private final ApplicationEventPublisher applicationEventPublisher;
private final InstanceParameterRepository instanceParameterRepository;
private final TriggerEventRepository triggerEventRepository;
private final WorkflowInstanceRepository workflowInstanceRepository;
private final TaskInstanceRepository taskInstanceRepository;
private final ObjectMapper objectMapper;
private final MonitoringFileService monitoringFileService;
private final GlobalProperties globalProperties;
private final WorkflowRepository workflowRepository;
private final AsyncTaskInstanceRepository asyncTaskInstanceRepository;
private final ExpressionLanguage expressionLanguage;
private final Publisher publisher;
private final VolumeRepository volumeRepository;
public WorkerInternalApplication(
ParameterRepository parameterRepository,
ParameterDomainService parameterDomainService,
CredentialManager credentialManager,
NodeDefApi nodeDefApi,
WorkerRepository workerRepository,
ApplicationEventPublisher applicationEventPublisher,
InstanceParameterRepository instanceParameterRepository,
TriggerEventRepository triggerEventRepository,
WorkflowInstanceRepository workflowInstanceRepository,
TaskInstanceRepository taskInstanceRepository,
ObjectMapper objectMapper,
MonitoringFileService monitoringFileService,
GlobalProperties globalProperties,
WorkflowRepository workflowRepository,
AsyncTaskInstanceRepository asyncTaskInstanceRepository,
ExpressionLanguage expressionLanguage,
Publisher publisher,
VolumeRepository volumeRepository
) {
this.parameterRepository = parameterRepository;
this.parameterDomainService = parameterDomainService;
this.credentialManager = credentialManager;
this.nodeDefApi = nodeDefApi;
this.workerRepository = workerRepository;
this.applicationEventPublisher = applicationEventPublisher;
this.instanceParameterRepository = instanceParameterRepository;
this.triggerEventRepository = triggerEventRepository;
this.workflowInstanceRepository = workflowInstanceRepository;
this.taskInstanceRepository = taskInstanceRepository;
this.objectMapper = objectMapper;
this.monitoringFileService = monitoringFileService;
this.globalProperties = globalProperties;
this.workflowRepository = workflowRepository;
this.asyncTaskInstanceRepository = asyncTaskInstanceRepository;
this.expressionLanguage = expressionLanguage;
this.publisher = publisher;
this.volumeRepository = volumeRepository;
}
@Transactional
public void join(String workerId, Worker.Type type, String name, String tag) {
if (this.workerRepository.findById(workerId).isPresent()) {
this.workerRepository.updateTag(Worker.Builder.aWorker()
.id(workerId)
.tags(tag)
.build());
return;
}
this.workerRepository.add(Worker.Builder.aWorker()
.id(workerId)
.name(name)
.type(type)
.tags(tag)
.status(Worker.Status.ONLINE)
.build());
}
@Transactional
public void dispatchTask(TaskInstanceCreatedEvent event) {
var taskInstance = this.taskInstanceRepository.findById(event.getTaskInstanceId())
.orElseThrow(() -> new RuntimeException("未找到任务实例:" + event.getTaskInstanceId()));
if (taskInstance.getStatus() != InstanceStatus.INIT) {
return;
}
try {
if (!taskInstance.isVolume()) {
var nodeDef = this.nodeDefApi.findByType(taskInstance.getDefKey());
if (!nodeDef.getWorkerType().equals("DOCKER")) {
throw new RuntimeException("无法执行此类节点任务: " + nodeDef.getType());
}
}
List<Worker> workers;
if (taskInstance.isVolume()) {
workers = this.workerRe
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
一个面向DevOps领域的极易扩展的开源无代码(图形化)/低代码(GitOps)工具 (1137个子文件)
.env.cdn 138B
commit-msg 99B
nginx-http.conf 5KB
jm-icon-button.css 4KB
jm-icon-workflow.css 3KB
jm-icon-tab.css 2KB
jm-icon-input.css 2KB
jm-icon-menu.css 2KB
jm-icon-link.css 2KB
Dockerfile 356B
Dockerfile 166B
.env 54B
jm-icon-button.eot 14KB
jm-icon-workflow.eot 11KB
jm-icon-tab.eot 8KB
jm-icon-input.eot 7KB
jm-icon-menu.eot 7KB
jm-icon-link.eot 6KB
.env.example 214B
JianMuEl.g4 2KB
.gitignore 478B
.gitignore 63B
index.html 335B
favicon.ico 1KB
JianMuElLexer.interp 8KB
JianMuEl.interp 2KB
WorkerInternalApplication.java 40KB
ProjectApplication.java 36KB
DslParser.java 35KB
TriggerApplication.java 34KB
ViewController.java 34KB
TaskInstanceInternalApplication.java 26KB
JianMuElParser.java 19KB
Workflow.java 19KB
HubApplication.java 17KB
WorkerController.java 16KB
ProjectGroupApplication.java 15KB
WorkflowInstanceInternalApplication.java 13KB
WorkflowInternalApplication.java 13KB
AsyncTaskInstance.java 13KB
OAuth2Controller.java 12KB
WorkflowInstanceMapper.java 12KB
ReflectUntil.java 11KB
ProjectMapper.java 11KB
TaskInstanceMapper.java 10KB
GitlinkApi.java 10KB
JianMuElLexer.java 10KB
GiteeApi.java 10KB
FileSystemStorageService.java 10KB
CacheApplication.java 9KB
WorkflowInstance.java 9KB
WorkflowTaskTriggerParameterInstanceIntegrationTest.java 9KB
WorkflowDomainService.java 9KB
ElVisitorImpl.java 8KB
AsyncTaskInstanceInternalApplication.java 8KB
TaskInstanceRepositoryImpl.java 8KB
Project.java 8KB
AsyncTaskInstanceEventHandler.java 8KB
TaskInstanceEventHandler.java 7KB
GitLabApi.java 7KB
AsyncTaskInstanceMapper.java 7KB
GiteaApi.java 7KB
JgitService.java 7KB
VaultCredentialManager.java 7KB
WorkflowEventHandler.java 7KB
RestExceptionHandler.java 6KB
WorkflowInstanceEventHandler.java 6KB
TaskInstance.java 6KB
WorkflowTest.java 6KB
DslNode.java 6KB
ContainerSpec.java 6KB
Condition.java 5KB
ProjectController.java 5KB
ProjectLinkGroupMapper.java 5KB
WorkerTask.java 5KB
AppConfig.java 5KB
InstanceParameter.java 5KB
NodeDefinition.java 5KB
SwitchGateway.java 5KB
AsyncTask.java 4KB
NodeTest.java 4KB
WorkflowInstanceRepositoryImpl.java 4KB
AsyncTaskInstanceRepositoryImpl.java 4KB
VaultConfig.java 4KB
NodeDefinitionVersion.java 4KB
Parameter.java 4KB
WorkflowTest.java 4KB
NodeDsl.java 4KB
WorkflowIntegrationTest.java 4KB
ProjectGroupMapper.java 4KB
NodeInfo.java 4KB
NumberLogicTest.java 4KB
ProjectGroupController.java 4KB
DeferredResultService.java 4KB
InstanceParameterMapper.java 4KB
MonitoringFileService.java 4KB
TriggerEvent.java 4KB
NumberArithmeticTest.java 4KB
DispatchWorker.java 4KB
El.java 4KB
共 1137 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6732
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功