<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic SDE Connection report by user and computer in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/sde-connection-report-by-user-and-computer/m-p/396464#M31297</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Previously, I had created a Python script that used &lt;A href="http://resources.arcgis.com/en/help/main/10.2/index.html#//018z0000007z000000"&gt;ArcSDESQLExecute&lt;/A&gt; to query the SDE.PROCESS_INFORMATION table to get detailed connection information. Something like&lt;/P&gt;&lt;PRE __default_attr="sql" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14129625875728042" jivemacro_uid="_14129625875728042"&gt;
&lt;P&gt;SELECT UPPER(NODENAME) AS COMPUTER, COUNT(NODENAME) AS CONNECTIONS&lt;/P&gt;
&lt;P&gt;FROM SDE.PROCESS_INFORMATION&lt;/P&gt;
&lt;P&gt;GROUP BY NODENAME&lt;/P&gt;
&lt;P&gt;ORDER BY CONNECTIONS DESC, NODENAME&lt;/P&gt;









&lt;/PRE&gt;&lt;P&gt;and&lt;/P&gt;&lt;PRE __default_attr="sql" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14129626343742071" jivemacro_uid="_14129626343742071"&gt;
&lt;P&gt;SELECT UPPER(NODENAME) AS COMPUTER, OWNER AS USERNAME, COUNT(OWNER) AS USERCONNS&lt;/P&gt;
&lt;P&gt;FROM SDE.PROCESS_INFORMATION&lt;/P&gt;
&lt;P&gt;GROUP BY NODENAME, OWNER&lt;/P&gt;
&lt;P&gt;ORDER BY NODENAME, USERCONNS DESC, OWNER&lt;/P&gt;









&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Between the two, I was able to get the total number of connections for each computer, which users that computer was connecting with, and how many connections of each user were open.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Since then, I stumbled across &lt;A href="http://resources.arcgis.com/en/help/main/10.2/index.html#//018v00000030000000"&gt;ListUsers&lt;/A&gt; and thought maybe I should be using it instead of the SQL. On a mission to conquer ListUsers and get the same SDE connections "report" I came up with this:&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14129629091689262" jivemacro_uid="_14129629091689262" modifiedtitle="true"&gt;
&lt;P&gt;import arcpy&lt;/P&gt;
&lt;P&gt;from operator import itemgetter&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Get all connections and print the total&lt;/P&gt;
&lt;P&gt;GPRO_Connections = arcpy.ListUsers("Database Connections/SDE@GPRO.sde")&lt;/P&gt;
&lt;P&gt;print "{} total connections:".format(len(GPRO_Connections))&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Get and count unique computer connections and sort by number of connections&lt;/P&gt;
&lt;P&gt;AllClients = [conn.ClientName for conn in GPRO_Connections] ##Use list comprehension to get all ClientName values&lt;/P&gt;
&lt;P&gt;Clients = [(client, AllClients.count(client)) for client in set(AllClients)] ##Use list comprehension to get unique tuples of ClientName and number of connections&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Get and count unique user connections for each computer and print results&lt;/P&gt;
&lt;P&gt;for c in sorted(Clients, key=itemgetter(1), reverse=True): ##Sort the unique computers by descending connections and print results&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "{} ({})".format(c[0], c[1])&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ## Get and count unique user connections for the computer&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AllClientUsers = [user.Name for user in GPRO_Connections if user.ClientName == c[0]] ##Use list comprehension to get all users on the computer&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClientUsers = [(usr, AllClientUsers.count(usr)) for usr in set(AllClientUsers)] ## Use list comprehension to get unique tuples of users on the computer and number of connections&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ## Sort the computer's users by descending connections and print results&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for u in sorted(set(ClientUsers), key=itemgetter(1), reverse=True):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "\t{} ({})".format(u[0], u[1])&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Cleanup&lt;/P&gt;
&lt;P&gt;del GPRO_Connections&lt;/P&gt;
&lt;P&gt;arcpy.ClearWorkspaceCache_management()&lt;/P&gt;









&lt;/PRE&gt;&lt;P&gt;The ouput looks something like this&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14129633200265066 jive_text_macro" jivemacro_uid="_14129633200265066"&gt;
&lt;P&gt;43 total connections:&lt;/P&gt;
&lt;P&gt;CC1WA125 (9)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; SDE (4)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; JTX (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBATASKS (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;8GK69Y1 (3)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WARRENW (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; KURTHO (1)&lt;/P&gt;
&lt;P&gt;8GZ59Y1 (3)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; RANDYE (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBATASKS (1)&lt;/P&gt;
&lt;P&gt;1HTX8Y1 (3)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; KURTHO (1)&lt;/P&gt;
&lt;P&gt;8H269Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; JESSEF (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;1HSZ8Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;1NGY8Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; SDE (1)&lt;/P&gt;
&lt;P&gt;6IKSA69716 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (2)&lt;/P&gt;
&lt;P&gt;D2P3JF1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; CHRISSI (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBATASKS (1)&lt;/P&gt;
&lt;P&gt;1HWZ8Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; JASONT (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBATASKS (1)&lt;/P&gt;
&lt;P&gt;1K1Z8Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; KRISTYN (1)&lt;/P&gt;
&lt;P&gt;1MRX8Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;HGL7XL1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (1)&lt;/P&gt;
&lt;P&gt;75L7XL1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (1)&lt;/P&gt;
&lt;P&gt;8JKSB95938 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (1)&lt;/P&gt;
&lt;P&gt;6JKSA78574 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (1)&lt;/P&gt;
&lt;P&gt;2M068Y1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; SDE (1)&lt;/P&gt;
&lt;P&gt;VM1WA91 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;8GS49Y1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;1K1X8Y1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; ERIKS (1)&lt;/P&gt;
&lt;P&gt;46L27W1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (1)&lt;/P&gt;







&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've been learning Python from scratch over the past couple months and I'm pretty proud of how far I've come. However, I know there are a lot of nifty ways to do things and thought maybe the Python wizards here could offer some insight on the problem and my solution. At the very least, maybe someone else can get some use out of this code.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 10 Oct 2014 17:45:11 GMT</pubDate>
    <dc:creator>BlakeTerhune</dc:creator>
    <dc:date>2014-10-10T17:45:11Z</dc:date>
    <item>
      <title>SDE Connection report by user and computer</title>
      <link>https://community.esri.com/t5/python-questions/sde-connection-report-by-user-and-computer/m-p/396464#M31297</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Previously, I had created a Python script that used &lt;A href="http://resources.arcgis.com/en/help/main/10.2/index.html#//018z0000007z000000"&gt;ArcSDESQLExecute&lt;/A&gt; to query the SDE.PROCESS_INFORMATION table to get detailed connection information. Something like&lt;/P&gt;&lt;PRE __default_attr="sql" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14129625875728042" jivemacro_uid="_14129625875728042"&gt;
&lt;P&gt;SELECT UPPER(NODENAME) AS COMPUTER, COUNT(NODENAME) AS CONNECTIONS&lt;/P&gt;
&lt;P&gt;FROM SDE.PROCESS_INFORMATION&lt;/P&gt;
&lt;P&gt;GROUP BY NODENAME&lt;/P&gt;
&lt;P&gt;ORDER BY CONNECTIONS DESC, NODENAME&lt;/P&gt;









&lt;/PRE&gt;&lt;P&gt;and&lt;/P&gt;&lt;PRE __default_attr="sql" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14129626343742071" jivemacro_uid="_14129626343742071"&gt;
&lt;P&gt;SELECT UPPER(NODENAME) AS COMPUTER, OWNER AS USERNAME, COUNT(OWNER) AS USERCONNS&lt;/P&gt;
&lt;P&gt;FROM SDE.PROCESS_INFORMATION&lt;/P&gt;
&lt;P&gt;GROUP BY NODENAME, OWNER&lt;/P&gt;
&lt;P&gt;ORDER BY NODENAME, USERCONNS DESC, OWNER&lt;/P&gt;









&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Between the two, I was able to get the total number of connections for each computer, which users that computer was connecting with, and how many connections of each user were open.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Since then, I stumbled across &lt;A href="http://resources.arcgis.com/en/help/main/10.2/index.html#//018v00000030000000"&gt;ListUsers&lt;/A&gt; and thought maybe I should be using it instead of the SQL. On a mission to conquer ListUsers and get the same SDE connections "report" I came up with this:&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14129629091689262" jivemacro_uid="_14129629091689262" modifiedtitle="true"&gt;
&lt;P&gt;import arcpy&lt;/P&gt;
&lt;P&gt;from operator import itemgetter&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Get all connections and print the total&lt;/P&gt;
&lt;P&gt;GPRO_Connections = arcpy.ListUsers("Database Connections/SDE@GPRO.sde")&lt;/P&gt;
&lt;P&gt;print "{} total connections:".format(len(GPRO_Connections))&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Get and count unique computer connections and sort by number of connections&lt;/P&gt;
&lt;P&gt;AllClients = [conn.ClientName for conn in GPRO_Connections] ##Use list comprehension to get all ClientName values&lt;/P&gt;
&lt;P&gt;Clients = [(client, AllClients.count(client)) for client in set(AllClients)] ##Use list comprehension to get unique tuples of ClientName and number of connections&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Get and count unique user connections for each computer and print results&lt;/P&gt;
&lt;P&gt;for c in sorted(Clients, key=itemgetter(1), reverse=True): ##Sort the unique computers by descending connections and print results&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "{} ({})".format(c[0], c[1])&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ## Get and count unique user connections for the computer&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AllClientUsers = [user.Name for user in GPRO_Connections if user.ClientName == c[0]] ##Use list comprehension to get all users on the computer&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClientUsers = [(usr, AllClientUsers.count(usr)) for usr in set(AllClientUsers)] ## Use list comprehension to get unique tuples of users on the computer and number of connections&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ## Sort the computer's users by descending connections and print results&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for u in sorted(set(ClientUsers), key=itemgetter(1), reverse=True):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "\t{} ({})".format(u[0], u[1])&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Cleanup&lt;/P&gt;
&lt;P&gt;del GPRO_Connections&lt;/P&gt;
&lt;P&gt;arcpy.ClearWorkspaceCache_management()&lt;/P&gt;









&lt;/PRE&gt;&lt;P&gt;The ouput looks something like this&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14129633200265066 jive_text_macro" jivemacro_uid="_14129633200265066"&gt;
&lt;P&gt;43 total connections:&lt;/P&gt;
&lt;P&gt;CC1WA125 (9)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; SDE (4)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; JTX (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBATASKS (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;8GK69Y1 (3)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WARRENW (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; KURTHO (1)&lt;/P&gt;
&lt;P&gt;8GZ59Y1 (3)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; RANDYE (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBATASKS (1)&lt;/P&gt;
&lt;P&gt;1HTX8Y1 (3)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; KURTHO (1)&lt;/P&gt;
&lt;P&gt;8H269Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; JESSEF (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;1HSZ8Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;1NGY8Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; SDE (1)&lt;/P&gt;
&lt;P&gt;6IKSA69716 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (2)&lt;/P&gt;
&lt;P&gt;D2P3JF1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; CHRISSI (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBATASKS (1)&lt;/P&gt;
&lt;P&gt;1HWZ8Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; JASONT (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBATASKS (1)&lt;/P&gt;
&lt;P&gt;1K1Z8Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; KRISTYN (1)&lt;/P&gt;
&lt;P&gt;1MRX8Y1 (2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GBAVIEWER (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;HGL7XL1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (1)&lt;/P&gt;
&lt;P&gt;75L7XL1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (1)&lt;/P&gt;
&lt;P&gt;8JKSB95938 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (1)&lt;/P&gt;
&lt;P&gt;6JKSA78574 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (1)&lt;/P&gt;
&lt;P&gt;2M068Y1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; SDE (1)&lt;/P&gt;
&lt;P&gt;VM1WA91 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;8GS49Y1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GISVIEWER (1)&lt;/P&gt;
&lt;P&gt;1K1X8Y1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; ERIKS (1)&lt;/P&gt;
&lt;P&gt;46L27W1 (1)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WS (1)&lt;/P&gt;







&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've been learning Python from scratch over the past couple months and I'm pretty proud of how far I've come. However, I know there are a lot of nifty ways to do things and thought maybe the Python wizards here could offer some insight on the problem and my solution. At the very least, maybe someone else can get some use out of this code.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Oct 2014 17:45:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/sde-connection-report-by-user-and-computer/m-p/396464#M31297</guid>
      <dc:creator>BlakeTerhune</dc:creator>
      <dc:date>2014-10-10T17:45:11Z</dc:date>
    </item>
  </channel>
</rss>

