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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }