All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.rx.spring.MxController Maven / Gradle / Ivy

package org.rx.spring;

import com.alibaba.fastjson.JSONObject;
import com.sun.management.HotSpotDiagnosticMXBean;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.rx.core.*;
import org.rx.core.StringBuilder;
import org.rx.exception.ExceptionHandler;
import org.rx.exception.ExceptionLevel;
import org.rx.io.Bytes;
import org.rx.net.http.tunnel.Server;
import org.rx.net.socks.SocksContext;
import org.rx.util.BeanMapper;
import org.springframework.web.bind.annotation.*;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import java.util.Collections;
import java.util.List;

@RequiredArgsConstructor
@RestController
@RequestMapping("mx")
public class MxController {
    final Server server;

    @RequestMapping("queryTraces")
    public List queryTraces(Boolean newest, String level, Integer take) {
        ExceptionLevel el = null;
        if (!Strings.isBlank(level)) {
            el = ExceptionLevel.valueOf(level);
        }
        return ExceptionHandler.INSTANCE.queryTraces(newest, el, take);
    }

    @RequestMapping("queryMetrics")
    public List queryMetrics(String name, Integer take) {
        return ExceptionHandler.INSTANCE.queryMetrics(name, take);
    }

    @RequestMapping("setConfig")
    public RxConfig setConfig(@RequestBody RxConfig config) {
        return BeanMapper.DEFAULT.map(config, RxConfig.INSTANCE);
    }

    @RequestMapping("svr")
    public JSONObject server(HttpServletRequest request) {
        JSONObject j = new JSONObject(true);
        j.put("jarFile", App.getJarFile(this));
        j.put("inputArguments", ManagementFactory.getRuntimeMXBean().getInputArguments());
        HotSpotDiagnosticMXBean bean = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
        try {
            bean.setVMOption("UnlockCommercialFeatures", Boolean.TRUE.toString());
        } catch (Exception e) {
            j.put("UnlockCommercialFeatures", e.toString());
        }
        j.put("vmOptions", bean.getDiagnosticOptions());
        j.put("systemProperties", System.getProperties());
        j.put("cpuThreads", Constants.CPU_THREADS);
        File root = new File("/");
        j.put("diskUsableSpace", Bytes.readableByteSize(root.getUsableSpace()));
        j.put("diskTotalSpace", Bytes.readableByteSize(root.getTotalSpace()));

//        j.put("conf", conf);
        j.put("requestHeaders", Linq.from(Collections.list(request.getHeaderNames()))
                .select(p -> String.format("%s: %s", p, String.join("; ", Collections.list(request.getHeaders(p))))));
        j.put("errorTraces", queryTraces(null, null, 10));
        j.put("metrics", queryMetrics(null, 15));
        return j;
    }

    @RequestMapping("setVMOption")
    public void setVMOption(String k, String v) {
        HotSpotDiagnosticMXBean bean = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
        bean.setVMOption(k, v);
    }

    @RequestMapping("shell")
    public String shell(String shell, String workspace) {
        StringBuilder echo = new StringBuilder();
        ShellCommander cmd = new ShellCommander(shell, workspace);
        cmd.onOutPrint.combine((s, e) -> echo.append(e.toString()));
        cmd.start().waitFor(60);
        return echo.toString();
    }

    @SneakyThrows
    @RequestMapping("resolveHost")
    public Object[] resolveHost(String host) {
        return Linq.from(InetAddress.getAllByName(host)).select(p -> p.getHostAddress()).toArray();
    }

//    @PostMapping("directOffer")
//    public void directOffer(String appName, String socksId, String endpoint, MultipartFile binary) {
//        SendPack pack = new SendPack(appName, socksId, Sockets.parseEndpoint(endpoint));
//        pack.setBinary(binary);
//        server.frontendOffer(pack);
//    }
//
//    @SneakyThrows
//    @PostMapping("directPoll")
//    public void directPoll(String appName, String socksId, String endpoint, HttpServletResponse response) {
//        ReceivePack pack = server.frontendPoll(new SendPack(appName, socksId, Sockets.parseEndpoint(endpoint)));
//        ServletOutputStream out = response.getOutputStream();
//        for (IOStream binary : pack.getBinaries()) {
//            binary.read(out);
//        }
//    }

    @SneakyThrows
    @PostConstruct
    public void init() {
        Class.forName(App.class.getName());
        Tasks.setTimeout(() -> {
            String omega = RxConfig.INSTANCE.getOmega();
            if (omega != null) {
                SocksContext.omega(omega, null);
            }
        }, 60 * 1000);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy