package cc.mrbird.febs.monitor.controller; 
 | 
  
 | 
import cc.mrbird.febs.common.annotation.ControllerEndpoint; 
 | 
import cc.mrbird.febs.common.entity.FebsResponse; 
 | 
import cc.mrbird.febs.common.utils.DateUtil; 
 | 
import cc.mrbird.febs.monitor.endpoint.FebsHttpTraceEndpoint; 
 | 
import cc.mrbird.febs.monitor.entity.FebsHttpTrace; 
 | 
import lombok.RequiredArgsConstructor; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.authz.annotation.RequiresPermissions; 
 | 
import org.springframework.boot.actuate.trace.http.HttpTrace; 
 | 
import org.springframework.web.bind.annotation.GetMapping; 
 | 
import org.springframework.web.bind.annotation.RequestMapping; 
 | 
import org.springframework.web.bind.annotation.RestController; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.HashMap; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
import static cc.mrbird.febs.monitor.endpoint.FebsHttpTraceEndpoint.FebsHttpTraceDescriptor; 
 | 
  
 | 
/** 
 | 
 * @author MrBird 
 | 
 */ 
 | 
@Slf4j 
 | 
@RestController 
 | 
@RequestMapping("febs/actuator") 
 | 
@RequiredArgsConstructor 
 | 
public class FebsActuatorController { 
 | 
  
 | 
    private final FebsHttpTraceEndpoint httpTraceEndpoint; 
 | 
  
 | 
    @GetMapping("httptrace") 
 | 
    @RequiresPermissions("httptrace:view") 
 | 
    @ControllerEndpoint(exceptionMessage = "请求追踪失败") 
 | 
    public FebsResponse httpTraces(String method, String url) { 
 | 
        FebsHttpTraceDescriptor traces = httpTraceEndpoint.traces(); 
 | 
        List<HttpTrace> httpTraceList = traces.getTraces(); 
 | 
        List<FebsHttpTrace> febsHttpTraces = new ArrayList<>(); 
 | 
        httpTraceList.forEach(t -> { 
 | 
            FebsHttpTrace febsHttpTrace = new FebsHttpTrace(); 
 | 
            febsHttpTrace.setRequestTime(DateUtil.formatInstant(t.getTimestamp(), DateUtil.FULL_TIME_SPLIT_PATTERN)); 
 | 
            febsHttpTrace.setMethod(t.getRequest().getMethod()); 
 | 
            febsHttpTrace.setUrl(t.getRequest().getUri()); 
 | 
            febsHttpTrace.setStatus(t.getResponse().getStatus()); 
 | 
            febsHttpTrace.setTimeTaken(t.getTimeTaken()); 
 | 
            if (StringUtils.isNotBlank(method) && StringUtils.isNotBlank(url)) { 
 | 
                if (StringUtils.equalsIgnoreCase(method, febsHttpTrace.getMethod()) 
 | 
                        && StringUtils.containsIgnoreCase(febsHttpTrace.getUrl().toString(), url)) { 
 | 
                    febsHttpTraces.add(febsHttpTrace); 
 | 
                } 
 | 
            } else if (StringUtils.isNotBlank(method)) { 
 | 
                if (StringUtils.equalsIgnoreCase(method, febsHttpTrace.getMethod())) { 
 | 
                    febsHttpTraces.add(febsHttpTrace); 
 | 
                } 
 | 
            } else if (StringUtils.isNotBlank(url)) { 
 | 
                if (StringUtils.containsIgnoreCase(febsHttpTrace.getUrl().toString(), url)) { 
 | 
                    febsHttpTraces.add(febsHttpTrace); 
 | 
                } 
 | 
            } else { 
 | 
                febsHttpTraces.add(febsHttpTrace); 
 | 
            } 
 | 
        }); 
 | 
  
 | 
        Map<String, Object> data = new HashMap<>(2); 
 | 
        data.put("rows", febsHttpTraces); 
 | 
        data.put("total", febsHttpTraces.size()); 
 | 
        return new FebsResponse().success().data(data); 
 | 
    } 
 | 
} 
 |