Mercurial > hg > monetdb-java
annotate src/main/java/org/monetdb/mcl/net/ClientInfo.java @ 904:2d880f90be2a
Try to use reasonable defaults for ClientInfo
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Fri, 14 Jun 2024 16:50:27 +0200 (10 months ago) |
parents | 778959b2e0a4 |
children | a52bc2dcdb8c |
rev | line source |
---|---|
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
1 package org.monetdb.mcl.net; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
2 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
3 import org.monetdb.jdbc.MonetDriver; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
4 |
904
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
5 import java.io.File; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
6 import java.lang.management.ManagementFactory; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
7 import java.lang.management.RuntimeMXBean; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
8 import java.net.InetAddress; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
9 import java.net.UnknownHostException; |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
10 import java.sql.ClientInfoStatus; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
11 import java.sql.SQLClientInfoException; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
12 import java.util.Collections; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
13 import java.util.Map; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
14 import java.util.Properties; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
15 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
16 public class ClientInfo { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
17 private static final String defaultHostname = findHostname(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
18 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
19 private static final String defaultClientLibrary = findClientLibrary(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
20 |
904
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
21 private static final String defaultApplicationName = findApplicationName(); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
22 |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
23 private static final String defaultPid = findPid(); |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
24 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
25 private final Properties props; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
26 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
27 public ClientInfo() { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
28 props = new Properties(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
29 props.setProperty("ClientHostname", defaultHostname); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
30 props.setProperty("ClientLibrary", defaultClientLibrary); |
904
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
31 props.setProperty("ClientPid", defaultPid); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
32 props.setProperty("ApplicationName", defaultApplicationName); |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
33 props.setProperty("ClientRemark", ""); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
34 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
35 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
36 private static String findHostname() { |
904
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
37 try { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
38 return InetAddress.getLocalHost().getHostName(); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
39 } catch (UnknownHostException e) { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
40 return ""; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
41 } |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
42 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
43 |
904
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
44 private static String findApplicationName() { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
45 String appName = ""; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
46 try { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
47 String prop = System.getProperty("sun.java.command"); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
48 if (prop != null) { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
49 // we want only the command, and not the arguments |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
50 prop = prop.split("\\s", 2)[0]; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
51 // keep only the basename5 |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
52 int idx = prop.lastIndexOf(File.separatorChar); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
53 if (idx >= 0) |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
54 prop = prop.substring(idx + 1); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
55 appName = prop; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
56 } |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
57 } catch (SecurityException e) { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
58 // ignore |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
59 } |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
60 |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
61 return appName; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
62 } |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
63 |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
64 private static String findPid() { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
65 try { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
66 RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean(); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
67 String pidAtHostname = mxbean.getName(); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
68 return pidAtHostname.split("@", 2)[0]; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
69 } catch (RuntimeException e) { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
70 return ""; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
71 } |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
72 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
73 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
74 private static String findClientLibrary() { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
75 return "monetdb-java " + MonetDriver.getDriverVersion(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
76 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
77 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
78 public String format() { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
79 StringBuilder builder = new StringBuilder(200); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
80 for (String name : props.stringPropertyNames()) { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
81 String value = props.getProperty(name); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
82 builder.append(name); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
83 builder.append('='); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
84 builder.append(value); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
85 builder.append('\n'); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
86 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
87 return builder.toString(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
88 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
89 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
90 public Properties get() { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
91 Properties ret = new Properties(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
92 ret.putAll(props); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
93 return ret; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
94 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
95 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
96 public boolean set(String name, String value) throws SQLClientInfoException { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
97 if (value == null) |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
98 value = ""; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
99 if (value.contains("\n")) { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
100 Map<String, ClientInfoStatus> map = Collections.singletonMap(name, ClientInfoStatus.REASON_VALUE_INVALID); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
101 throw new SQLClientInfoException(map); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
102 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
103 if (props.containsKey(name)) { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
104 props.setProperty(name, value); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
105 return true; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
106 } else { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
107 return false; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
108 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
109 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
110 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
111 } |