DEV Community

Query Filter
Query Filter

Posted on

gradle6


-javaagent:force-hostname-agent.jar=host56;C:/temp/dds

=====================

public static String cachePattern;
public static String cacheOverride;

public static void premain(String agentArgs, Instrumentation inst) {

    String[] parts = agentArgs != null ? agentArgs.split(";") : new String[0];

    final String forcedHost = parts.length > 0 ? parts[0] : "forced-hostname";
    final String forcedUser = parts.length > 1 ? parts[1] : "forced-user";

    cachePattern  = parts.length > 2 ? parts[2] : null;
    cacheOverride = parts.length > 3 ? parts[3] : null;

    HostnameAdvice.forcedHost = forcedHost;
    UserNameAdvice.forcedUser = forcedUser;

    new AgentBuilder.Default()

        .type(named("com.citi.rio.umb"))
        .transform((builder, typeDescription, classLoader, module) ->
            builder
                .method(named("getCurrentCanonicalHostname"))
                    .intercept(Advice.to(HostnameAdvice.class))
                .method(named("getCurrentUserName"))
                    .intercept(Advice.to(UserNameAdvice.class))
        )

        .type(named("com.citigroup.get.quantum.config.v2.internal.ClientConfig"))
        .transform((builder, typeDescription, classLoader, module) ->
            builder
                .method(named("getFileCacheLocation"))
                .intercept(Advice.to(FileCacheLocationAdvice.class))
        )

        .installOn(inst);
}

===================

public static class FileCacheLocationAdvice {

    @Advice.OnMethodExit
    static void exit(@Advice.Return(readOnly = false) String returned) {

        // If original value is null, or agent not configured, skip override
        if (returned == null ||
            ForceHostnameAgent.cachePattern == null ||
            ForceHostnameAgent.cacheOverride == null) {
            return;  // keeps the original constructor-set value
        }

        // Only replace if pattern matches
        if (returned.contains(ForceHostnameAgent.cachePattern)) {

            System.out.println(
                "Agent overriding cache location: "
                + returned + " -> "
                + ForceHostnameAgent.cacheOverride
            );

            returned = ForceHostnameAgent.cacheOverride;
        }
        // else: nothing changed, original value is returned
    }
}

==================

public static void premain(String agentArgs, Instrumentation inst) {

    String[] parts = agentArgs != null ? agentArgs.split(";") : new String[0];

    // existing hostname/user args
    final String forcedHost = parts.length > 0 ? parts[0] : "forced-hostname";
    final String forcedUser = parts.length > 1 ? parts[1] : "forced-user";

    // cache override args
    cachePattern  = parts.length > 2 ? parts[2] : null;
    cacheOverride = parts.length > 3 ? parts[3] : null;

    HostnameAdvice.forcedHost = forcedHost;
    UserNameAdvice.forcedUser = forcedUser;

    System.out.println("Agent args: host=" + forcedHost +
                       ", user=" + forcedUser +
                       ", cachePattern=" + cachePattern +
                       ", cacheOverride=" + cacheOverride);

    // -----------------------------
    // Transformer 1: Hostname / User
    // -----------------------------
    new AgentBuilder.Default()
        .type(named("com.citi.rio.umb"))
        .transform((builder, td, cl, m) ->
            builder
                .method(named("getCurrentCanonicalHostname"))
                    .intercept(Advice.to(HostnameAdvice.class))
                .method(named("getCurrentUserName"))
                    .intercept(Advice.to(UserNameAdvice.class))
        )
        .installOn(inst);

    // -----------------------------
    // Transformer 2: ClientConfig file cache
    // -----------------------------
    new AgentBuilder.Default()
        .type(named("com.citigroup.get.quantum.config.v2.internal.ClientConfig"))
        .transform((builder, td, cl, m) ->
            builder
                .method(named("getFileCacheLocation"))
                .intercept(Advice.to(FileCacheLocationAdvice.class))
        )
        .installOn(inst);

    // -----------------------------
    // Future transformers can go here
    // -----------------------------
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)