Skip to content

Commit 851728d

Browse files
committed
PYTHON-1140 - Expand handshake metadata OS information
1 parent 9a76d82 commit 851728d

File tree

1 file changed

+56
-2
lines changed

1 file changed

+56
-2
lines changed

pymongo/pool.py

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,68 @@ def is_ip_address(address):
9696

9797
_METADATA = SON([
9898
('driver', SON([('name', 'PyMongo'), ('version', __version__)])),
99-
('os', SON([('type', sys.platform)])),
10099
])
101100

101+
if sys.platform.startswith('linux'):
102+
_METADATA['os'] = SON([
103+
('type', platform.system()),
104+
# Distro name and version (e.g. Ubuntu 16.04 xenial)
105+
('name', ' '.join([part for part in
106+
platform.linux_distribution() if part])),
107+
('architecture', platform.machine()),
108+
# Kernel version (e.g. 4.4.0-17-generic).
109+
('version', platform.release())
110+
])
111+
elif sys.platform == 'darwin':
112+
_METADATA['os'] = SON([
113+
('type', platform.system()),
114+
('name', platform.system()),
115+
('architecture', platform.machine()),
116+
# (mac|i|tv)OS(X) version (e.g. 10.11.6) instead of darwin
117+
# kernel version.
118+
('version', platform.mac_ver()[0])
119+
])
120+
elif sys.platform == 'win32':
121+
_METADATA['os'] = SON([
122+
('type', platform.system()),
123+
# "Windows XP", "Windows 7", "Windows 10", etc.
124+
('name', ' '.join((platform.system(), platform.release()))),
125+
('architecture', platform.machine()),
126+
# Windows patch level (e.g. 5.1.2600-SP3)
127+
('version', '-'.join(platform.win32_ver()[1:3]))
128+
])
129+
elif sys.platform.startswith('java'):
130+
_name, _ver, _arch = platform.java_ver()[-1]
131+
_METADATA['os'] = SON([
132+
# Linux, Windows 7, Mac OS X, etc.
133+
('type', _name),
134+
('name', _name),
135+
# x86, x86_64, AMD64, etc.
136+
('architecture', _arch),
137+
# Linux kernel version, OSX version, etc.
138+
('version', _ver)
139+
])
140+
else:
141+
# Get potential alias (e.g. SunOS 5.11 becomes Solaris 2.11)
142+
_aliased = platform.system_alias(
143+
platform.system(), platform.release(), platform.version())
144+
_METADATA['os'] = SON([
145+
('type', platform.system()),
146+
('name', ' '.join([part for part in _aliased[:2] if part])),
147+
('architecture', platform.machine()),
148+
('version', _aliased[2])
149+
])
150+
102151
if platform.python_implementation().startswith('PyPy'):
103152
_METADATA['platform'] = ' '.join(
104153
(platform.python_implementation(),
105154
'.'.join(imap(str, sys.pypy_version_info)),
106-
"(Python %s)" % '.'.join(imap(str, sys.version_info))))
155+
'(Python %s)' % '.'.join(imap(str, sys.version_info))))
156+
elif sys.platform.startswith('java'):
157+
_METADATA['platform'] = ' '.join(
158+
(platform.python_implementation(),
159+
'.'.join(imap(str, sys.version_info)),
160+
'(%s)' % ' '.join((platform.system(), platform.release()))))
107161
else:
108162
_METADATA['platform'] = ' '.join(
109163
(platform.python_implementation(),

0 commit comments

Comments
 (0)