monit-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: configuration framework patch


From: Rory Toma
Subject: Re: configuration framework patch
Date: 26 Sep 2002 16:55:27 -0700

Go for it. I don't use ldap, but I can see where I might want a SQL
based config.

On Thu, 2002-09-26 at 16:42, Martin Pala wrote:
> Hi,
> 
> there's open interface framework patch for allowing monit to support  
> more configuration sources in addition to present plaintext file. It is 
> based on general interface, that can call optional sub-procedures for 
> specific configuration sources. In the patch is for illustration 
> attached void parse_ldap() function, that actually does nothing (it is 
> the target for my next work). It works well on my station.
> 
> If you agree this architectural modification, i can commit it to the CVS :)
> 
> Greetings,
> Martin
> 
> ----
> 

> diff -Naur monit/files.c monit-devel/files.c
> --- monit/files.c     2002-09-27 00:31:30.000000000 +0200
> +++ monit-devel/files.c       2002-09-27 00:38:35.000000000 +0200
> @@ -128,8 +128,8 @@
>  /**
>   * Search the system for the monit control file. Try first
>   * ~/.monitrc, if that fails try ./monitrc and finally /etc/monitrc.
> - * Exit the application if the control file is not found.
> - * @return The location of monits control file (monitrc)
> + * @return The location of monits control file (monitrc) or NULL if
> + * control file wasn't found
>   */
>  char *find_rcfile() {
>  
> @@ -158,10 +158,7 @@
>    if ( exist_file(rcfile) ) 
>      return (rcfile);
>    
> -  error("%s: Cannot find the control file at ~/.%s, ./%s or at /etc/%s\n",
> -     prog, MONITRC, MONITRC, MONITRC);
> -  
> -  exit(1);
> +  return (NULL);
>    
>  }
>  
> diff -Naur monit/ldap.c monit-devel/ldap.c
> --- monit/ldap.c      1970-01-01 01:00:00.000000000 +0100
> +++ monit-devel/ldap.c        2002-09-27 00:38:35.000000000 +0200
> @@ -0,0 +1,42 @@
> +/*
> + * Copyright (C), 2000-2002 by Contributors to the monit codebase.
> + * All Rights Reserved.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of the
> + * License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software Foundation,
> + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> + */
> +
> +#include "monitor.h"
> +
> +/**
> + *  LDAP access methods.
> + *
> + *  @author Jan-Henrik Haukeland, <address@hidden>
> + *  @author Martin Pala, <address@hidden>
> + *
> + *  @version $Id$
> + *
> + *  @file
> + */
> +
> +
> +/* ------------------------------------------------------------------ Public 
> */
> +
> +
> +int parse_ldap() {
> +
> +  return TRUE;
> +
> +}
> +
> diff -Naur monit/monitor.c monit-devel/monitor.c
> --- monit/monitor.c   2002-09-27 00:38:59.000000000 +0200
> +++ monit-devel/monitor.c     2002-09-27 00:38:35.000000000 +0200
> @@ -104,7 +104,7 @@
>  
>  /**
>   * Initialize this application - Register signal handlers,
> - * Parse the control file and initialize the program's
> + * Parse the configuration and initialize the program's
>   * datastructures and the log system.
>   */
>  static void do_init() {
> @@ -158,9 +158,9 @@
>  
>    /*
>     * Start the Parser and create the process list. This will also set
> -   * any Runtime constants defined in the controlfile.
> +   * any Runtime constants defined in the configuration.
>     */
> -  if ( ! parse(Run.controlfile) ) {
> +  if ( ! parse() ) {
>      
>      exit(1);
>      
> @@ -208,7 +208,7 @@
>    /* Run the garbage collector */
>    gc();
>  
> -  if ( ! parse(Run.controlfile) ) {
> +  if ( ! parse() ) {
>      
>      log("%s daemon died\n", prog);
>      exit(1);
> diff -Naur monit/monitor.h monit-devel/monitor.h
> --- monit/monitor.h   2002-09-26 20:04:08.000000000 +0200
> +++ monit-devel/monitor.h     2002-09-27 00:38:35.000000000 +0200
> @@ -296,7 +296,9 @@
>  char *url_encode(char *uri);
>  char *get_basic_authentication_header();
>  int   set_md5sum(char **, char *);
> -int   parse(char *);
> +int   parse();
> +int   parse_plain(char *);
> +int   parse_ldap();
>  void  start();
>  void  start_group(char *);
>  void  start_process(Process_T);
> diff -Naur monit/p.y monit-devel/p.y
> --- monit/p.y 2002-09-26 20:04:09.000000000 +0200
> +++ monit-devel/p.y   2002-09-27 00:38:35.000000000 +0200
> @@ -130,7 +130,6 @@
>                                          1, RESOURCE_ACTION_ALERT };
>  
>    /* Private prototypes */
> -  static void initialize();
>    static void addprocess(Process_T);
>    static void addmail(char *, struct MailFilter *);
>    static void createprocess(char *, char *);
> @@ -146,7 +145,6 @@
>    static void setuname(char *);
>    static void setpasswd(char *);
>    static void reset_mailfilter();
> -  static void reset_runmail();
>    static void reset_portset();
>    static void reset_resourceset();
>    static void check_name(char *);
> @@ -507,10 +505,10 @@
>  
>  
>  /*
> - * The Parser hook - start parsing the control file
> - * Returns TRUE if parsing succeeded, otherwise FALSE
> + * Start parsing the plaintext control file
> + * @return TRUE if parsing succeeded, otherwise FALSE
>   */
> -int parse(char *controlfile) {
> +int parse_plain(char *controlfile) {
>  
>    processlist= tail= current= NULL;
>    
> @@ -524,15 +522,12 @@
>      
>      error("%s: Error opening the control file '%s' -- %s\n",
>         prog, controlfile, STRERROR);
> +
>      return(FALSE);
>      
>    }
>  
> -  /* Creation of the global process list is synchronized  */
> -  LOCK(Run.mutex)
> -      initialize();
> -      yyparse();
> -  END_LOCK;
> +  yyparse();
>        
>    fclose(yyin);
>  
> @@ -552,26 +547,6 @@
>  /* ----------------------------------------------------------------- Private 
> */
>  
>  
> -/**
> - * Initialize objects. Placeholder for setting values that can change
> - * between cycles (changed config file) and not easily supported by
> - * the grammar implementation.
> - */
> -static void initialize() {
> -
> -  destroy_hosts_allow(); 
> -  Run.dolog= FALSE;
> -  Run.dohttpd= FALSE;
> -  Run.Auth.defined= FALSE;
> -  reset_runmail();
> -  if(Run.bind_addr) {
> -    free(Run.bind_addr);
> -    Run.bind_addr= NULL;
> -  }
> -  
> -}
> -
> -
>  /*
>   * Create a new process object and add any current objects to the
>   * process list.
> @@ -1011,21 +986,6 @@
>  }
>  
>  
> -/*
> - * Reset and release the Run mail-format sub-structure
> - */
> -static void reset_runmail() {
> -
> -  free(Run.MailFormat.from);
> -  Run.MailFormat.from= NULL;
> -  free(Run.MailFormat.subject);
> -  Run.MailFormat.subject= NULL;
> -  free(Run.MailFormat.message);
> -  Run.MailFormat.message= NULL;
> -
> -}
> -
> -
>  /* ---------------------------------------------------------------- Checkers 
> */
>  
>  
> diff -Naur monit/util.c monit-devel/util.c
> --- monit/util.c      2002-09-16 12:20:38.000000000 +0200
> +++ monit-devel/util.c        2002-09-27 00:38:35.000000000 +0200
> @@ -55,6 +55,8 @@
>  static int is_unsafe(unsigned char *c);
>  static char *is_str_defined(char *);
>  static char *is_str_defined_default(char *);
> +static void  initialize();
> +static void  reset_runmail();
>  
>  /**
>   *  General purpose utility methods.
> @@ -935,6 +937,35 @@
>  }
>  
>  
> +/**
> + * High level function to monit's configuration interface
> + */
> +int parse() {
> +
> +  /* Creation of the global process list is synchronized  */
> +  LOCK(Run.mutex)
> +
> +    initialize();
> +
> +    if(Run.controlfile)
> +      if(!parse_plain(Run.controlfile)) {
> +        error("%s: Parsing of configuration file failed\n", prog);
> +        return FALSE;
> +      }
> +
> +    if( TRUE /* this will be replaced by test on variables that will define 
> ldap source */ )
> +      if(!parse_ldap()) {
> +        error("%s: Parsing of LDAP configuration failed\n", prog);
> +        return FALSE;
> +      }
> +
> +  END_LOCK;
> +
> +  return TRUE;
> +
> +}
> +
> +
>  /* ----------------------------------------------------------------- Private 
> */
>  
>  
> @@ -985,3 +1016,42 @@
>  
>  }
>  
> +
> +/**
> + * Initialize objects. Placeholder for setting values that can change
> + * between cycles (changed configuration) and not easily supported by
> + * the grammar implementation.
> + */
> +static void initialize() {
> +
> +  destroy_hosts_allow();
> +  reset_runmail();
> +
> +  Run.dolog= FALSE;
> +  Run.dohttpd= FALSE;
> +  Run.Auth.defined= FALSE;
> +
> +  if(Run.bind_addr) {
> +    free(Run.bind_addr);
> +    Run.bind_addr= NULL;
> +  }
> +
> +}
> +
> +
> +/*
> + * Reset and release the Run mail-format sub-structure
> + */
> +static void reset_runmail() {
> +
> +  free(Run.MailFormat.from);
> +  Run.MailFormat.from= NULL;
> +
> +  free(Run.MailFormat.subject);
> +  Run.MailFormat.subject= NULL;
> +
> +  free(Run.MailFormat.message);
> +  Run.MailFormat.message= NULL;
> +
> +}
> +
-- 
Rory Toma               address@hidden
VP of Run Level 5       http://www.trs80.net
Digeo Digital           http://www.digeo.com

Attachment: signature.asc
Description: This is a digitally signed message part


reply via email to

[Prev in Thread] Current Thread [Next in Thread]