Author: DNB
Date: Fri Aug 5 12:12:41 2005
New Revision: 36
Modified:
trunk/ChangeLog
trunk/seen.c
trunk/seenserv.c
trunk/seenserv.h
trunk/seenserv_help.c
Log:
add dbupdatetime setting to save new data to the db at set interval (1 to 900 seconds), or on lookup request
Modified: trunk/ChangeLog
==============================================================================
--- trunk/ChangeLog (original)
+++ trunk/ChangeLog Fri Aug 5 12:12:41 2005
@@ -2,6 +2,7 @@
Fish (F), Mark (M), DeadNotBuried (D)
==============================================================================
3.0.a3-dev
+ - save records to db on configurable timer (D)
- remove records based on age if they are displayed by a request (D)
- more optimising of limit and expiry checks (D)
- add timer for removing records based on age (D)
Modified: trunk/seen.c
==============================================================================
--- trunk/seen.c (original)
+++ trunk/seen.c Fri Aug 5 12:12:41 2005
@@ -60,7 +60,7 @@
lnode_t *ln;
SeenData *sd;
- ln = list_first( seenlist );
+ ln = list_last( seenlist );
while ( ln )
{
sd = lnode_get( ln );
@@ -71,7 +71,7 @@
lnode_destroy( ln );
return NS_SUCCESS;
}
- ln = list_next( seenlist, ln );
+ ln = list_prev( seenlist, ln );
}
return NS_FAILURE;
}
@@ -92,8 +92,8 @@
strlcpy(sd->message, message ? message : "", SS_MESSAGESIZE);
sd->seentype = type;
sd->seentime = me.now;
+ sd->recordsaved = 0;
lnode_create_append( seenlist, sd );
- DBAStore( "seendata", sd->nick,( void * )sd, sizeof( SeenData ) );
/* only check list limit if the nick wasn't already in the list */
if( nickremoved == NS_FAILURE )
checkseenlistlimit(SS_LISTLIMIT_COUNT);
@@ -101,6 +101,33 @@
}
/*
+ * Save Data to DB on timer
+*/
+int dbsavetimer(void)
+{
+ SET_SEGV_LOCATION();
+ lnode_t *ln, *ln2;
+ SeenData *sd;
+ int savecount=0;
+
+ ln = list_last( seenlist );
+ while ( ln )
+ {
+ sd = lnode_get( ln );
+ if (sd->recordsaved == 0)
+ {
+ savecount++;
+ sd->recordsaved = 1;
+ DBAStore( "seendata", sd->nick,( void * )sd, sizeof( SeenData ) );
+ ln = list_prev( seenlist, ln );
+ } else {
+ return NS_SUCCESS;
+ }
+ }
+ return NS_SUCCESS;
+}
+
+/*
* Removes SeenData if records past max entries setting
*/
void checkseenlistlimit(int checktype)
@@ -137,6 +164,7 @@
sd = ns_calloc( sizeof( SeenData ) );
os_memcpy( sd, data, sizeof( SeenData ) );
+ sd->recordsaved = 1;
lnode_create_append( seenlist, sd );
return NS_FALSE;
}
@@ -221,6 +249,8 @@
SET_SEGV_LOCATION();
if( SeenAvailable( cmdparams ) == NS_FALSE )
return NS_SUCCESS;
+ /* ensure DB is saved before doing lookup */
+ dbsavetimer();
if( ValidateNick( cmdparams->av[0] ) == NS_SUCCESS )
{
u = FindUser( cmdparams->av[0] );
@@ -245,6 +275,8 @@
SET_SEGV_LOCATION();
if( SeenAvailable( cmdparams ) == NS_FALSE )
return NS_SUCCESS;
+ /* ensure DB is saved before doing lookup */
+ dbsavetimer();
if( ValidateNick( cmdparams->av[0] ) == NS_FAILURE )
{
seen_report( cmdparams, "%s is not a valid nickname", cmdparams->av[0] );
Modified: trunk/seenserv.c
==============================================================================
--- trunk/seenserv.c (original)
+++ trunk/seenserv.c Fri Aug 5 12:12:41 2005
@@ -36,7 +36,7 @@
static int sns_set_eventpart( CmdParams *cmdparams, SET_REASON reason );
static int sns_set_eventkick( CmdParams *cmdparams, SET_REASON reason );
static int sns_set_expiretime (CmdParams *cmdparams, SET_REASON reason);
-
+static int sns_set_dbupdatetime (CmdParams *cmdparams, SET_REASON reason);
/** Copyright info */
const char *sns_copyright[] = {
@@ -78,6 +78,7 @@
{"EVENTPART", &SeenServ.eventpart, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, NULL, sns_help_set_eventpart, sns_set_eventpart, (void *)1 },
{"EVENTKICK", &SeenServ.eventkick, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, NULL, sns_help_set_eventkick, sns_set_eventkick, (void *)1 },
{"EXPIRETIME", &SeenServ.expiretime, SET_TYPE_INT, 0, 1000, NS_ULEVEL_ADMIN, NULL, sns_help_set_expiretime, sns_set_expiretime, (void *)0 },
+ {"DBUPDATETIME", &SeenServ.dbupdatetime, SET_TYPE_INT, 1, 900, NS_ULEVEL_ADMIN, NULL, sns_help_set_dbupdatetime, sns_set_dbupdatetime, (void *)300 },
{NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL },
};
@@ -144,6 +145,7 @@
irc_chanalert (sns_bot, "Seen Channel Not Enabled");
}
AddTimer (TIMER_TYPE_DAILY, removeagedseenrecords, "removeagedseenrecords", 0);
+ AddTimer (TIMER_TYPE_INTERVAL, dbsavetimer, "seenservdbsavetimer", SeenServ.dbupdatetime);
return NS_SUCCESS;
};
@@ -162,7 +164,9 @@
*/
int ModFini( void )
{
+ DelTimer ("seenservdbsavetimer");
DelTimer ("removeagedseenrecords");
+ dbsavetimer();
destroyseenlist();
return NS_SUCCESS;
}
@@ -346,6 +350,16 @@
}
/*
+ * Check DB Update Time and update timer interval
+*/
+static int sns_set_dbupdatetime (CmdParams *cmdparams, SET_REASON reason)
+{
+ if (reason == SET_CHANGE)
+ SetTimerInterval( "seenservdbsavetimer", SeenServ.dbupdatetime );
+ return NS_SUCCESS;
+}
+
+/*
* Remove Aged Records if required
*/
int removeagedseenrecords(void)
Modified: trunk/seenserv.h
==============================================================================
--- trunk/seenserv.h (original)
+++ trunk/seenserv.h Fri Aug 5 12:12:41 2005
@@ -67,6 +67,7 @@
int eventpart;
int eventkick;
int expiretime;
+ int dbupdatetime;
} SeenServ;
typedef struct SeenData {
@@ -76,6 +77,7 @@
char message[SS_MESSAGESIZE];
SEEN_TYPE seentype;
time_t seentime;
+ int recordsaved;
} SeenData;
/* SeenServ Module Help - seenserv_help.c */
@@ -92,6 +94,7 @@
extern const char *sns_help_set_eventpart[];
extern const char *sns_help_set_eventkick[];
extern const char *sns_help_set_expiretime[];
+extern const char *sns_help_set_dbupdatetime[];
extern const char *sns_help_seen[];
extern const char *sns_help_seennick[];
extern const char *sns_help_del[];
@@ -112,6 +115,7 @@
/* seen.c */
int removepreviousnick(char *nick);
void addseenentry(char *nick, char *host, char *vhost, char *message, int type);
+int dbsavetimer(void);
void checkseenlistlimit(int checktype);
void loadseendata(void);
int sortlistbytime(const void *key1, const void *key2);
Modified: trunk/seenserv_help.c
==============================================================================
--- trunk/seenserv_help.c (original)
+++ trunk/seenserv_help.c Fri Aug 5 12:12:41 2005
@@ -107,6 +107,14 @@
NULL
};
+const char *sns_help_set_dbupdatetime[] = {
+ "\2DBUPDATETIME <seconds>\2",
+ "Sets how often data is written to the database.",
+ "NOTE: Data will also be saved when a SEEN or",
+ "SEENNICK command is performed.",
+ NULL
+};
+
const char *sns_help_seen[] = {
"Displays Last Seen Nicks",
"Syntax: \2SEEN <host>\2",
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.