User:Antony Fairport/Scripts/Sim Restart Notifier

From Second Life Wiki
< User:Antony Fairport
Revision as of 05:05, 15 January 2013 by Antony Fairport (talk | contribs) (Created page with "[http://antonyfairport.blogspot.com/2012/06/region-restart-notifier-again.html Originally documented here]. <lsl> ///////////////////////////////////////////////////////////////…")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Originally documented here.

<lsl> ////////////////////////////////////////////////////////////////////// // Sim Restart Notifier -- By Antony Fairport // // Informs you when the sim it is located on restarts. Handy during // rolling restarts when you've had to run away and want to be told // as soon as it's back up. // // Revision history: // ------------------------------------------------------------ // // 2012-05-21 // Added more information to the notification (channel, version, etc) // and also added the option to send an email instead of an IM. // // 2011-05-31 // First version.

////////////////////////////////////////////////////////////////////// // Set the following to an email address if you want the restart // notifier to send an email rather than send an IM. Leave it empty // to get an IM instead. string EMAIL_TO = "";

////////////////////////////////////////////////////////////////////// // Gobals. string g_sLastChannel = ""; string g_sLastVersion = ""; string g_sLastHost = ""; string g_sLastRestart = "";

////////////////////////////////////////////////////////////////////// // Format a llGetTimestamp() string FormatTime( string sTime ) {

   list l = llParseString2List( sTime, [ "T", "." ], [] );
   
   return llList2String( l, 0 ) + " " + llList2String( l, 1 ) + " UTC";

}

////////////////////////////////////////////////////////////////////// // Record details about the current server. RememberServer() {

   g_sLastChannel = llGetEnv( "sim_channel" );
   g_sLastVersion = llGetEnv( "sim_version" );
   g_sLastHost    = llGetSimulatorHostname();

}

////////////////////////////////////////////////////////////////////// // Return details of a change (or not). string Changed( string sOld, string sNew ) {

   if ( sOld != sNew )
   {
       return " (Changed. Was " + sOld + ")";
   }
   else
   {
       return "";
   }

}

////////////////////////////////////////////////////////////////////// // Send out the information about the restart. InformAboutRestart() {

   // Remember the time of this restart.        
   g_sLastRestart = FormatTime( llGetTimestamp() );
   
   // The headline for the information.
   string sHeadline = llGetRegionName() + " has restarted.";
   
   // The body of the information.
   string s = sHeadline + "\n\n";
   
   // Get the current information about the region.
   string sChannel = llGetEnv( "sim_channel" );
   string sVersion = llGetEnv( "sim_version" );
   string sHost    = llGetSimulatorHostname();
   
   // Add the host/server details.
   s += "Channel: " + sChannel + Changed( g_sLastChannel, sChannel ) + "\n";
   s += "Version: " + sVersion + Changed( g_sLastVersion, sVersion ) + "\n";
   s += "Host: "    + sHost    + Changed( g_sLastHost,    sHost    ) + "\n";
   // Having compared, we remember the new server state.
   RememberServer();
   // If we have an email address...
   if ( EMAIL_TO != "" )
   {
       // ...send it as an email.
       llEmail( EMAIL_TO, sHeadline, s );
   }
   else
   {
       // No email address. Just IM it.
       llInstantMessage( llGetOwner(), s );
   }

}

////////////////////////////////////////////////////////////////////// // Default state. default {

   //////////////////////////////////////////////////////////////////
   // State entry.
   state_entry()
   {
       // Remember the current details of the server.
       RememberServer();
   }
   //////////////////////////////////////////////////////////////////
   // Reset on rez.
   on_rez( integer start_param )
   {
       llResetScript();
   }
       
   //////////////////////////////////////////////////////////////////
   // React to a touch.
   touch_start( integer num_detected )
   {
       // If we don't have a last restart time...
       if ( g_sLastRestart == "" )
       {
           // ...so say.
           llWhisper( 0, "No restart has been recorded yet." );
       }
       else
       {
           // Otherwise say what the last recorded restart time is.
           llWhisper( 0, "Last restart was " + g_sLastRestart );
       }
   }
   
   //////////////////////////////////////////////////////////////////
   // React to changes.
   changed( integer change )
   {
       // If the region has started...
       if ( change & CHANGED_REGION_START )
       {
           // ...inform about the restart.
           InformAboutRestart();
       }
       // Reset if we're passed on.
       else if ( change & CHANGED_OWNER )
       {
           llResetScript();
       }
   }

} </lsl>