@@ -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+ 
102151if  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 ()))))
107161else :
108162 _METADATA ['platform' ] =  ' ' .join (
109163 (platform .python_implementation (),
0 commit comments