anchor.diff:  			log("Problem writing stats to file: $e");
   		}
   	});
  +
  +	//Keep track of when the server was started
  +	startDate = new DateTime.now();
   }
   
   PostgreSql get dbConn => app.request.attributes.dbConn;
  
positive.code: }
  
  @app.Route('/serverLog')
  Future<Map> getServerLog()
  {
  	Map statusMap = {};
  	Completer c = new Completer();
  	try
  	{
  		DateTime date = new DateTime.now();
  		DateFormat format = new DateFormat("MM_dd_yy");
  		Process.run("tail", ['-n','200','serverLogs/${format.format(date)}-server.log'])
  			.then((ProcessResult result)
  			{
  				statusMap['serverLog'] = result.stdout;
  				c.complete(statusMap);
  			});
  	}
  	catch(exception, stacktrace)
  	{
  		statusMap['serverLog'] = exception.toString();
  		c.complete(statusMap);
  	}
  	return c.future;
  }
  
  @app.Route('/restartServer')
  String restartServer(@app.QueryParam('secret') String secret)
  {
  	if(secret == restartSecret)
  	{
  	  try
  	  {
  		  Process.runSync("/bin/sh",["restart_server.sh"]);
  		  return "OK";
  	  }
      catch(e){log("Error restarting server: $e"); return "ERROR";}
  	}
  	else
  		return "NOT AUTHORIZED";
  
negative.code: 		});
  		statusMap['playerList'] = users;
  		statusMap['numStreetsLoaded'] = StreetUpdateHandler.streets.length;
  		ProcessResult result = await Process.run("/bin/sh",["getMemoryUsage.sh"]);
  		statusMap['bytesUsed'] = int.parse(result.stdout)*1024;
  		result = await Process.run("/bin/sh",["getCpuUsage.sh"]);
  		statusMap['cpuUsed'] = double.parse(result.stdout.trim());
  		result = await Process.run("/bin/sh",["getUptime.sh"]);
          statusMap['uptime'] = result.stdout.trim();
  	}
  	catch(e){log("Error getting server status: $e");}
  