Add experimental "show grid users online" console command to show grid users online from a standalone/robust instance.
This is not guaranteed to be accurate since users may be left "online" in certain situations. For example, if a simulator crashes and they never login/logout again. To counter this somewhat, only users continuously online for less than 5 days are shown.0.7.6-extended
							parent
							
								
									8b7bcc8346
								
							
						
					
					
						commit
						49228f9855
					
				|  | @ -130,7 +130,7 @@ namespace OpenSim.Framework | ||||||
|         private static SmartThreadPool m_ThreadPool; |         private static SmartThreadPool m_ThreadPool; | ||||||
| 
 | 
 | ||||||
|         // Unix-epoch starts at January 1st 1970, 00:00:00 UTC. And all our times in the server are (or at least should be) in UTC. |         // Unix-epoch starts at January 1st 1970, 00:00:00 UTC. And all our times in the server are (or at least should be) in UTC. | ||||||
|         private static readonly DateTime unixEpoch = |         public static readonly DateTime UnixEpoch = | ||||||
|             DateTime.ParseExact("1970-01-01 00:00:00 +0", "yyyy-MM-dd hh:mm:ss z", DateTimeFormatInfo.InvariantInfo).ToUniversalTime(); |             DateTime.ParseExact("1970-01-01 00:00:00 +0", "yyyy-MM-dd hh:mm:ss z", DateTimeFormatInfo.InvariantInfo).ToUniversalTime(); | ||||||
| 
 | 
 | ||||||
|         private static readonly string rawUUIDPattern |         private static readonly string rawUUIDPattern | ||||||
|  | @ -521,19 +521,19 @@ namespace OpenSim.Framework | ||||||
| 
 | 
 | ||||||
|         public static int ToUnixTime(DateTime stamp) |         public static int ToUnixTime(DateTime stamp) | ||||||
|         { |         { | ||||||
|             TimeSpan t = stamp.ToUniversalTime() - unixEpoch; |             TimeSpan t = stamp.ToUniversalTime() - UnixEpoch; | ||||||
|             return (int) t.TotalSeconds; |             return (int) t.TotalSeconds; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public static DateTime ToDateTime(ulong seconds) |         public static DateTime ToDateTime(ulong seconds) | ||||||
|         { |         { | ||||||
|             DateTime epoch = unixEpoch; |             DateTime epoch = UnixEpoch; | ||||||
|             return epoch.AddSeconds(seconds); |             return epoch.AddSeconds(seconds); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public static DateTime ToDateTime(int seconds) |         public static DateTime ToDateTime(int seconds) | ||||||
|         { |         { | ||||||
|             DateTime epoch = unixEpoch; |             DateTime epoch = UnixEpoch; | ||||||
|             return epoch.AddSeconds(seconds); |             return epoch.AddSeconds(seconds); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -47,6 +47,45 @@ namespace OpenSim.Services.UserAccountService | ||||||
|         public GridUserService(IConfigSource config) : base(config)  |         public GridUserService(IConfigSource config) : base(config)  | ||||||
|         { |         { | ||||||
|             m_log.Debug("[GRID USER SERVICE]: Starting user grid service"); |             m_log.Debug("[GRID USER SERVICE]: Starting user grid service"); | ||||||
|  | 
 | ||||||
|  |             MainConsole.Instance.Commands.AddCommand( | ||||||
|  |                 "Users", false, | ||||||
|  |                 "show grid users online", | ||||||
|  |                 "show grid users online", | ||||||
|  |                 "Show number of grid users registered as online.",  | ||||||
|  |                 "This number may not be accurate as a region may crash or not be cleanly shutdown and leave grid users shown as online\n." | ||||||
|  |                 + "For this reason, users online for more than 5 days are not currently counted", | ||||||
|  |                 HandleShowGridUsersOnline); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected void HandleShowGridUsersOnline(string module, string[] cmdparams) | ||||||
|  |         { | ||||||
|  | //            if (cmdparams.Length != 4) | ||||||
|  | //            { | ||||||
|  | //                MainConsole.Instance.Output("Usage: show grid users online"); | ||||||
|  | //                return; | ||||||
|  | //            } | ||||||
|  | 
 | ||||||
|  | //            int onlineCount; | ||||||
|  |             int onlineRecentlyCount = 0; | ||||||
|  | 
 | ||||||
|  |             DateTime now = DateTime.UtcNow; | ||||||
|  | 
 | ||||||
|  |             foreach (GridUserData gu in m_Database.GetAll("")) | ||||||
|  |             { | ||||||
|  |                 if (bool.Parse(gu.Data["Online"])) | ||||||
|  |                 { | ||||||
|  | //                    onlineCount++; | ||||||
|  | 
 | ||||||
|  |                     int unixLoginTime = int.Parse(gu.Data["Login"]); | ||||||
|  |                     DateTime loginDateTime = Util.UnixEpoch.AddSeconds(unixLoginTime); | ||||||
|  | 
 | ||||||
|  |                     if ((loginDateTime - now).Days < 5) | ||||||
|  |                         onlineRecentlyCount++; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             MainConsole.Instance.OutputFormat("Users online within last 5 days: {0}", onlineRecentlyCount); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public virtual GridUserInfo GetGridUserInfo(string userID) |         public virtual GridUserInfo GetGridUserInfo(string userID) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Justin Clark-Casey (justincc)
						Justin Clark-Casey (justincc)