[NeoStats-Devel] [Commits] r2773 - in trunk: . include modules/statserv src
[email protected] Thu, 25 Aug 2005 07:43:13 +1000
| Newsgroups | gmane.comp.neostats.devel |
|---|---|
| Message-ID | <[email protected]> |
Author: Mark
Date: Thu Aug 25 05:43:09 2005
New Revision: 2773
Modified:
trunk/ChangeLog
trunk/include/neostats.h
trunk/modules/statserv/htmlstats.c
trunk/modules/statserv/server.c
trunk/modules/statserv/server.h
trunk/src/misc.c
trunk/src/servers.c
trunk/src/users.c
Log:
Create core support for map generation accessible to all modules
Modified: trunk/ChangeLog
==============================================================================
--- trunk/ChangeLog (original)
+++ trunk/ChangeLog Thu Aug 25 05:43:09 2005
@@ -4,6 +4,9 @@
Fish (F), Mark (M), DeadNotBuried (D)
===============================================================================
* NeoStats * Version 3.0.a3-dev
+ - Creaye core support for map generation accessible to all modules via a
+ callback handler and tidy up StatServ map code to take advantage of
+ the new function. (M)
- Exclude system tidy ups and bug fix for module excludes. (M)
- More Validatexxx functions which will allow for wildcards in the string
tested. (M)
Modified: trunk/include/neostats.h
==============================================================================
--- trunk/include/neostats.h (original)
+++ trunk/include/neostats.h Thu Aug 25 05:43:09 2005
@@ -1510,14 +1510,15 @@
typedef int (*ServerListHandler) ( Client *s, void *v );
EXPORTFUNC int ProcessServerList( ServerListHandler handler, void *v );
/* List walk handler type */
+typedef void( *ServerMapHandler )( const Client *s, int isroot, int depth, void *v );
+EXPORTFUNC void ProcessServerMap( ServerMapHandler handler, int useexclusions, void *v );
+/* List walk handler type */
typedef int (*ModuleListHandler) ( Module *module_ptr, void *v );
EXPORTFUNC int ProcessModuleList( ModuleListHandler handler, void *v );
/* List walk handler type */
typedef int (*BanListHandler) ( Ban *ban, void *v );
EXPORTFUNC int ProcessBanList( BanListHandler handler, void *v );
-EXPORTFUNC hash_t *GetServerHash( void );
-
EXPORTFUNC int HaveFeature( int mask );
EXPORTFUNC void AddEvent( ModuleEvent *eventptr );
Modified: trunk/modules/statserv/htmlstats.c
==============================================================================
--- trunk/modules/statserv/htmlstats.c (original)
+++ trunk/modules/statserv/htmlstats.c Thu Aug 25 05:43:09 2005
@@ -596,63 +596,50 @@
TABLE_END( opf );
}
-/** @brief get_map
+/** @brief HTMLMapHandler
*
- * HTML recursive handler to generate network map
+ * HTML handler to output network map
*
- * @param none
+ * @param s pointer to server
+ * @param isroot whether this server is root
+ * @param depth of server in map
+ * @param v not used
*
* @return none
*/
-static void get_map( char *uplink, int level )
+static void HTMLMapHandler( const Client *s, int isroot, int depth, void *v )
{
#define MAPBUFSIZE 512
static char buf[MAPBUFSIZE];
- hscan_t hs;
- hnode_t *sn;
- Client *s;
+ Client *u = (Client *)v;
serverstat *ss;
- int i;
- hash_scan_begin( &hs, GetServerHash() );
- while( ( sn = hash_scan_next( &hs ) ) ) {
- s = hnode_get( sn );
- ss = GetServerModValue( s );
-
- if( ( level == 0 ) &&( s->uplinkname[0] == 0 ) ) {
- /* its the root server */
- if( StatServ.exclusions && IsExcluded( s ) ) {
- get_map( s->name, level );
- }
- TABLE_START( opf );
- os_fprintf( opf, "<tr><th>Server Name</th><th>Users/Max</th><th>Opers/Max</th><th>Ping/Max</th></tr>" );
+ ss = ( serverstat * ) GetServerModValue( s );
+ if( isroot )
+ {
+ /* its the root server */
+ os_fprintf( opf, "<tr><td>%s</td><td>%d/%d</td><td>%d/%d</td><td>%d/%d</td></tr>\n",
+ ss->name, s->server->users, ss->users.alltime.max, ss->opers.current, ss->opers.alltime.max,
+ (int)s->server->ping,( int )ss->highest_ping );
+ }
+ else
+ {
+ /* its not the root server */
+ if( StatServ.flatmap )
+ {
os_fprintf( opf, "<tr><td>%s</td><td>%d/%d</td><td>%d/%d</td><td>%d/%d</td></tr>\n",
ss->name, s->server->users, ss->users.alltime.max, ss->opers.current, ss->opers.alltime.max,
(int)s->server->ping,( int )ss->highest_ping );
- get_map( s->name, level + 1 );
- } else if( ( level > 0 ) && !ircstrcasecmp( uplink, s->uplinkname ) ) {
- if( StatServ.exclusions && IsExcluded( s ) ) {
- get_map( s->name, level );
- }
- /* its not the root server */
- if( StatServ.flatmap )
- {
- os_fprintf( opf, "<tr><td>%s</td><td>%d/%d</td><td>%d/%d</td><td>%d/%d</td></tr>\n",
- ss->name, s->server->users, ss->users.alltime.max, ss->opers.current, ss->opers.alltime.max,
- (int)s->server->ping,( int )ss->highest_ping );
- }
- else
- {
- buf[0]='\0';
- for( i = 1; i < level; i++ ) {
- ircsnprintf( buf, MAPBUFSIZE, "%s     |", buf );
- }
- os_fprintf( opf, "<tr><td>%s\\_%s</td><td>%d/%d</td><td>%d/%d</td><td>%d/%d</td></tr>\n",
- buf, ss->name, s->server->users, ss->users.alltime.max, ss->opers.current, ss->opers.alltime.max,
- (int)s->server->ping,( int )ss->highest_ping );
- }
- get_map( s->name, level + 1 );
+ }
+ else
+ {
+ buf[0]='\0';
+ for( ; depth > 1; depth-- )
+ strlcat( buf, "     |", MAPBUFSIZE );
+ os_fprintf( opf, "<tr><td>%s\\_%s</td><td>%d/%d</td><td>%d/%d</td><td>%d/%d</td></tr>\n",
+ buf, ss->name, s->server->users, ss->users.alltime.max, ss->opers.current, ss->opers.alltime.max,
+ (int)s->server->ping,( int )ss->highest_ping );
}
}
}
@@ -668,7 +655,9 @@
static void html_map( void )
{
- get_map( "", 0 );
+ TABLE_START( opf );
+ os_fprintf( opf, "<tr><th>Server Name</th><th>Users/Max</th><th>Opers/Max</th><th>Ping/Max</th></tr>" );
+ ProcessServerMap( HTMLMapHandler, StatServ.exclusions, NULL );
TABLE_END( opf );
}
Modified: trunk/modules/statserv/server.c
==============================================================================
--- trunk/modules/statserv/server.c (original)
+++ trunk/modules/statserv/server.c Thu Aug 25 05:43:09 2005
@@ -326,65 +326,51 @@
return NS_SUCCESS;
}
-/** @brief makemap
+/** @brief MapHandler
*
- * MAP command handler
- * Recursively transverse map and report results
+ * MAP process callback
+ * report results of map process
*
- * @param uplink current point in map
- * @param u client to report to
- * @param level in map
+ * @param s pointer to server
+ * @param isroot whether this server is root
+ * @param depth of server in map
+ * @param v user to report to
*
- * @return NS_SUCCESS if succeeds, else NS_FAILURE
+ * @return none
*/
-static void makemap( const char *uplink, const Client * u, int level )
+static void MapHandler( const Client *s, int isroot, int depth, void *v )
{
- static char buf[256];
- hscan_t hs;
- hnode_t *sn;
- Client *s;
+#define MAPBUFSIZE 512
+ static char buf[MAPBUFSIZE];
+ Client *u = (Client *)v;
serverstat *ss;
- int i;
- hash_scan_begin( &hs, GetServerHash() );
- while( ( sn = hash_scan_next( &hs ) ) )
+
+ ss = ( serverstat * ) GetServerModValue( s );
+ if( isroot )
+ {
+ /* its the root server */
+ irc_prefmsg( ss_bot, u, "\2%-45s [ %d/%d ] [ %d/%d ] [ %d/%ld ]",
+ ss->name, s->server->users,( int )ss->users.alltime.max, ss->opers.current, ss->opers.alltime.max,
+ ( int )s->server->ping, ss->highest_ping );
+ }
+ else
{
- s = hnode_get( sn );
- printf( "%d %s %s (%s)\n", level, s->name, s->uplink ? s->uplink->name : "", uplink );
- ss = ( serverstat * ) GetServerModValue( s );
- if( ( level == 0 ) &&( s->uplinkname[0] == 0 ) )
+ /* its not the root server */
+ if( StatServ.flatmap )
{
- /* its the root server */
- if( StatServ.exclusions && IsExcluded( s ) )
- makemap( s->name, u, level );
- irc_prefmsg( ss_bot, u,
- "\2%-45s [ %d/%d ] [ %d/%d ] [ %d/%ld ]",
+ irc_prefmsg( ss_bot, u, "\2%-40s [ %d/%d ] [ %d/%d ] [ %d/%ld ]",
ss->name, s->server->users,( int )ss->users.alltime.max,
ss->opers.current, ss->opers.alltime.max,( int )s->server->ping, ss->highest_ping );
- makemap( s->name, u, level + 1 );
- } else if( ( level > 0 ) &&( s->uplink ) && !ircstrcasecmp( s->uplink->name, uplink ) )
+ }
+ else
{
- if( StatServ.exclusions && IsExcluded( s ) )
- makemap( s->name, u, level );
- /* its not the root server */
- if( StatServ.flatmap )
- {
- irc_prefmsg( ss_bot, u,
- "\2%-40s [ %d/%d ] [ %d/%d ] [ %d/%ld ]",
- ss->name, s->server->users,( int )ss->users.alltime.max,
- ss->opers.current, ss->opers.alltime.max,( int )s->server->ping, ss->highest_ping );
- }
- else
- {
- buf[0]='\0';
- for( i = 1; i < level; i++ )
- strlcat( buf, " |", 256 );
- irc_prefmsg( ss_bot, u,
- "%s \\_\2%-40s [ %d/%d ] [ %d/%d ] [ %d/%ld ]",
- buf, ss->name, s->server->users,( int )ss->users.alltime.max,
- ss->opers.current, ss->opers.alltime.max,( int )s->server->ping, ss->highest_ping );
- }
- makemap( s->name, u, level + 1 );
+ buf[0]='\0';
+ for( ; depth > 1; depth-- )
+ strlcat( buf, " |", 256 );
+ irc_prefmsg( ss_bot, u, "%s \\_\2%-40s [ %d/%d ] [ %d/%d ] [ %d/%ld ]",
+ buf, ss->name, s->server->users,( int )ss->users.alltime.max,
+ ss->opers.current, ss->opers.alltime.max,( int )s->server->ping, ss->highest_ping );
}
}
}
@@ -404,7 +390,7 @@
SET_SEGV_LOCATION();
irc_prefmsg( ss_bot, cmdparams->source, "%-40s %-10s %-10s %-10s",
"\2[NAME]\2", "\2[USERS/MAX]\2", "\2[OPERS/MAX]\2", "\2[LAG/MAX]\2" );
- makemap( "", cmdparams->source, 0 );
+ ProcessServerMap( MapHandler, StatServ.exclusions, (void *)cmdparams->source );
irc_prefmsg( ss_bot, cmdparams->source, "End of list." );
return NS_SUCCESS;
}
@@ -563,7 +549,7 @@
/* Calculate uptime as uptime from server plus uptime of NeoStats */
time_t uptime;
- uptime = s->server->uptime +( me.now - me.ts_boot );
+ uptime = s->server->uptime + ( me.now - me.ts_boot );
irc_prefmsg( ss_bot, cmdparams->source, "Version: %s", s->version );
irc_prefmsg( ss_bot, cmdparams->source, "Uptime: %ld day%s, %02ld:%02ld:%02ld",( uptime / TS_ONE_DAY ),( ( uptime / TS_ONE_DAY ) == 1 ) ? "" : "s",( ( uptime / TS_ONE_HOUR ) % 24 ),( ( uptime / TS_ONE_MINUTE ) % TS_ONE_MINUTE ),( uptime % 60 ) );
irc_prefmsg( ss_bot, cmdparams->source, "Current Users: %-3d (%d%%)",
Modified: trunk/modules/statserv/server.h
==============================================================================
--- trunk/modules/statserv/server.h (original)
+++ trunk/modules/statserv/server.h Thu Aug 25 05:43:09 2005
@@ -41,7 +41,6 @@
}serverstat;
typedef void( *ServerStatHandler )( const serverstat *cs, const void *v );
-
void GetServerStats( const ServerStatHandler handler, const void *v );
int ss_event_server( CmdParams *cmdparams );
Modified: trunk/src/misc.c
==============================================================================
--- trunk/src/misc.c (original)
+++ trunk/src/misc.c Thu Aug 25 05:43:09 2005
@@ -166,7 +166,7 @@
argvsize += 8;
*argv = ns_realloc( *argv, sizeof( char * ) * argvsize );
}
- if( ( *buf == ':' ) &&( colcount < 1 ) ) {
+ if( ( *buf == ':' ) && ( colcount < 1 ) ) {
buf++;
colcount++;
if( colon_special ) {
@@ -218,7 +218,7 @@
argvsize += 8;
*argv = ns_realloc( *argv, sizeof( char * ) * argvsize );
}
- if( ( *buf == ':' ) &&( colcount < 1 ) ) {
+ if( ( *buf == ':' ) && ( colcount < 1 ) ) {
buf++;
colcount++;
}
Modified: trunk/src/servers.c
==============================================================================
--- trunk/src/servers.c (original)
+++ trunk/src/servers.c Thu Aug 25 05:43:09 2005
@@ -24,7 +24,7 @@
*/
/* TODO:
- * - Deprecate GetServerHash()
+ * -
*/
#include "neostats.h"
@@ -411,6 +411,66 @@
return NS_SUCCESS;
}
+/** @brief TransverseMap
+ *
+ * Recursively transverse map and send results to handler
+ *
+ * @param handler to call with map entry
+ * @param useexclusions whether to observe global exclusions
+ * @param uplink current point in map
+ * @param depth in map
+ * @param v optional handler parameter
+ *
+ * @return none
+ */
+
+static void TransverseMap( ServerMapHandler handler, int useexclusions, const char *uplink, int depth, void *v )
+{
+ hscan_t hs;
+ hnode_t *sn;
+ Client *s;
+
+ hash_scan_begin( &hs, serverhash );
+ while( ( sn = hash_scan_next( &hs ) ) )
+ {
+ s = hnode_get( sn );
+ /*printf( "%d %s %s (%s)\n", depth, s->name, s->uplink ? s->uplink->name : "", uplink );*/
+ if( ( depth == 0 ) && ( s->uplinkname[0] == 0 ) )
+ {
+ /* its the root server */
+ if( useexclusions && IsExcluded( s ) )
+ TransverseMap( handler, useexclusions, s->name, depth, v );
+ handler( s, 1, depth, v );
+ TransverseMap( handler, useexclusions, s->name, depth + 1, v );
+ }
+ else if( ( depth > 0 ) && ( s->uplink ) && !ircstrcasecmp( s->uplink->name, uplink ) )
+ {
+ if( useexclusions && IsExcluded( s ) )
+ TransverseMap( handler, useexclusions, s->name, depth, v );
+ /* its not the root server */
+ handler( s, 0, depth, v );
+ TransverseMap( handler, useexclusions, s->name, depth + 1, v );
+ }
+ }
+}
+
+/** @brief ProcessServerMap
+ *
+ * Process server map
+ * Recursively transverse map and send results to handler
+ *
+ * @param handler to call with map entry
+ * @param useexclusions whether to observe global exclusions
+ * @param v optional handler parameter
+ *
+ * @return none
+ */
+
+void ProcessServerMap( ServerMapHandler handler, int useexclusions, void *v )
+{
+ TransverseMap( handler, useexclusions, "", 0, v );
+}
+
/** @brief RequestServerUptime
*
* Request uptime of a server
@@ -443,21 +503,6 @@
ProcessServerList( RequestServerUptime, NULL );
}
-/** @brief GetServerHash
- *
- * GetServerHash
- * NeoStats core use only.
- *
- * @param none
- *
- * @return server hash
- */
-
-hash_t *GetServerHash( void )
-{
- return serverhash;
-}
-
/** @brief AllocServerModPtr
*
* Allocate memory for a module pointer for a server
Modified: trunk/src/users.c
==============================================================================
--- trunk/src/users.c (original)
+++ trunk/src/users.c Thu Aug 25 05:43:09 2005
@@ -398,13 +398,13 @@
u->user->awaymsg[0] = 0;
cmdparams = ( CmdParams* ) ns_calloc( sizeof( CmdParams ) );
cmdparams->source = u;
- if( IsAway( u ) &&( !awaymsg ) )
+ if( IsAway( u ) && ( !awaymsg ) )
{
u->user->is_away = 0;
me.awaycount--;
u->uplink->server->awaycount--;
}
- else if( !IsAway( u ) &&( awaymsg ) )
+ else if( !IsAway( u ) && ( awaymsg ) )
{
u->user->is_away = 1;
me.awaycount++;
@@ -688,7 +688,7 @@
if( ircd_srv.features&FEATURE_UMODECLOAK )
{
/* Do we have a hidden host any more? */
- if( ( oldmode & UMODE_HIDE ) &&( !( u->user->Umode & UMODE_HIDE ) ) )
+ if( ( oldmode & UMODE_HIDE ) && ( !( u->user->Umode & UMODE_HIDE ) ) )
strlcpy( u->user->vhost, u->user->hostname, MAXHOST );
}
dlog( DEBUG1, "UserMode: modes for %s now %x", u->name, u->user->Umode );