DiagAgent.java 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import java.io.FileWriter;
  2. import java.io.PrintWriter;
  3. import java.lang.instrument.Instrumentation;
  4. import java.lang.reflect.Field;
  5. import java.lang.reflect.Method;
  6. public class DiagAgent {
  7. public static void agentmain(String args, Instrumentation inst) {
  8. try (PrintWriter out = new PrintWriter(new FileWriter("/tmp/forge-diag.txt"))) {
  9. try {
  10. Class<?> transUtils = null;
  11. for (Class<?> c : inst.getAllLoadedClasses()) {
  12. if ("com.mdframe.forge.starter.trans.util.TransUtils".equals(c.getName())) { transUtils = c; break; }
  13. }
  14. if (transUtils == null) { out.println("TransUtils not loaded"); return; }
  15. Field tmField = transUtils.getDeclaredField("transManager");
  16. tmField.setAccessible(true);
  17. Object transManager = tmField.get(null);
  18. if (transManager == null) { out.println("transManager null"); return; }
  19. Field ctxField = transManager.getClass().getDeclaredField("applicationContext");
  20. ctxField.setAccessible(true);
  21. Object ctx = ctxField.get(transManager);
  22. out.println("ctx = " + ctx.getClass().getName());
  23. Method getEnv = ctx.getClass().getMethod("getEnvironment");
  24. Object env = getEnv.invoke(ctx);
  25. Method getProp = env.getClass().getMethod("getProperty", String.class);
  26. for (String k : new String[]{"forge.crypto.enabled","forge.crypto.persistence.write-versioned","forge.crypto.persistence.enabled","forge.crypto.persistence.legacy-read-enabled"}) {
  27. out.println("ENV " + k + " = " + getProp.invoke(env, k));
  28. }
  29. Object sk = getProp.invoke(env, "forge.crypto.secret-key");
  30. out.println("ENV secret-key.len = " + (sk == null ? "null" : String.valueOf(sk).length()));
  31. Object ak = getProp.invoke(env, "forge.crypto.persistence.active-key");
  32. out.println("ENV active-key.len = " + (ak == null ? "null" : String.valueOf(ak).length()));
  33. out.println("ENV active-key-id = " + getProp.invoke(env, "forge.crypto.persistence.active-key-id"));
  34. Method getBean = ctx.getClass().getMethod("getBean", String.class);
  35. Object bean = getBean.invoke(ctx, "cryptoProperties");
  36. out.println("bean = " + bean.getClass().getName() + " @" + System.identityHashCode(bean));
  37. Object enabled = bean.getClass().getMethod("getEnabled").invoke(bean);
  38. Object secretKey = bean.getClass().getMethod("getSecretKey").invoke(bean);
  39. Object persistence = bean.getClass().getMethod("getPersistence").invoke(bean);
  40. out.println("BEAN enabled = " + enabled);
  41. out.println("BEAN secretKey.len = " + (secretKey == null ? "null" : String.valueOf(secretKey).length()));
  42. out.println("BEAN persistence @" + System.identityHashCode(persistence));
  43. Class<?> pc = persistence.getClass();
  44. out.println("BEAN persistence.enabled = " + pc.getMethod("getEnabled").invoke(persistence));
  45. out.println("BEAN persistence.writeVersioned = " + pc.getMethod("getWriteVersioned").invoke(persistence));
  46. out.println("BEAN persistence.legacyReadEnabled = " + pc.getMethod("getLegacyReadEnabled").invoke(persistence));
  47. out.println("BEAN persistence.activeKeyId = [" + pc.getMethod("getActiveKeyId").invoke(persistence) + "]");
  48. Object akey = pc.getMethod("getActiveKey").invoke(persistence);
  49. out.println("BEAN persistence.activeKey.len = " + (akey == null ? "null" : String.valueOf(akey).length()));
  50. Object lkey = pc.getMethod("getLegacyKey").invoke(persistence);
  51. out.println("BEAN persistence.legacyKey.len = " + (lkey == null ? "null" : String.valueOf(lkey).length()));
  52. } catch (Throwable t) { t.printStackTrace(out); }
  53. } catch (Exception ignore) {}
  54. }
  55. }