Roxen.git / server / base_server / snmpagent.pike

version» Context lines:

Roxen.git/server/base_server/snmpagent.pike:1:   /* -  * $Id: snmpagent.pike,v 1.17 2001/09/11 14:30:47 hop Exp $ +  * $Id: snmpagent.pike,v 1.18 2001/09/13 13:15:19 hop Exp $    *    * The Roxen SNMP agent    * Copyright © 2001, Roxen IS.    *    * Author: Honza Petrous    * January 2001         RFC 1213 base MIB    system.* (all done)
Roxen.git/server/base_server/snmpagent.pike:105:   #define RISMIB_BASE_WEBSERVER_VS_DESC RISMIB_BASE_WEBSERVER_VS+".1.3"   // enterprises.roxenis.app.webserver.vsTable.vsEntry.vsSent   #define RISMIB_BASE_WEBSERVER_VS_SDATA RISMIB_BASE_WEBSERVER_VS+".1.4"   // enterprises.roxenis.app.webserver.vsTable.vsEntry.vsReceived   #define RISMIB_BASE_WEBSERVER_VS_RDATA RISMIB_BASE_WEBSERVER_VS+".1.5"   // enterprises.roxenis.app.webserver.vsTable.vsEntry.vsHeaders   #define RISMIB_BASE_WEBSERVER_VS_SHDRS RISMIB_BASE_WEBSERVER_VS+".1.6"   // enterprises.roxenis.app.webserver.vsTable.vsEntry.vsRequests   #define RISMIB_BASE_WEBSERVER_VS_REQS RISMIB_BASE_WEBSERVER_VS+".1.7"   // - // enterprises.roxenis.app.webserver.trap - #define RISMIB_BASE_WEBSERVER_TRAP RISMIB_BASE_WEBSERVER+".3" - // enterprises.roxenis.app.webserver.trap.vsColdTrap - #define RISMIB_BASE_WEBSERVER_TRAP_VSCOLD RISMIB_BASE_WEBSERVER_TRAP+".1" - // enterprises.roxenis.app.webserver.trap.vsSpecificTrap - #define RISMIB_BASE_WEBSERVER_TRAP_VSSPEC RISMIB_BASE_WEBSERVER_TRAP+".2" + // enterprises.roxenis.app.webserver.trapGlobal + #define RISMIB_BASE_WEBSERVER_TRAPG RISMIB_BASE_WEBSERVER+".3" + // enterprises.roxenis.app.webserver.trapGlobal.serverDownTrap + #define RISMIB_BASE_WEBSERVER_TRAPG_DOWN RISMIB_BASE_WEBSERVER_TRAPG+".1" + // enterprises.roxenis.app.webserver.trapVs + #define RISMIB_BASE_WEBSERVER_TRAPVS RISMIB_BASE_WEBSERVER+".4" + // enterprises.roxenis.app.webserver.trapVs.vsExternalTrap + #define RISMIB_BASE_WEBSERVER_TRAP_VSEXT RISMIB_BASE_WEBSERVER_TRAPVS+".1" + // enterprises.roxenis.app.webserver.trapVs.vsStartTrap + #define RISMIB_BASE_WEBSERVER_TRAP_VSSTART RISMIB_BASE_WEBSERVER_TRAPVS+".2" + // enterprises.roxenis.app.webserver.trap.vsStopTrap + #define RISMIB_BASE_WEBSERVER_TRAP_VSSTOP RISMIB_BASE_WEBSERVER_TRAPVS+".3" + // enterprises.roxenis.app.webserver.trapVs.vsCongChangedTrap + #define RISMIB_BASE_WEBSERVER_TRAP_VSCONF RISMIB_BASE_WEBSERVER_TRAPVS+".4"      #define LOG_EVENT(txt, pkt) log_event(txt, pkt)      #if !efunc(Array.oid_sort_func)   int oid_sort_func(string a0,string b0) {    string a2="",b2="";    int a1, b1;    sscanf(a0,"%d.%s",a1,a2);    sscanf(b0,"%d.%s",b1,b2);    if (a1>b1) return 1;
Roxen.git/server/base_server/snmpagent.pike:327:       if(!sizeof(hp[0]))    hp[0] = get_cif_domain();    err = catch( fd = Protocols.SNMP.protocol(0, hp[0], p||161) );    if(arrayp(err))    RXML.run_error("SNMPagent: can't open UDP port " + hp[0]+":"+(string)(p||161)+"[" + err[0] + "].");    SNMPAGENT_MSG(sprintf("SNMP UDP port %s:%d binded successfully.", hp[0], p||161));       // first we server dealyed traps    if(arrayp(dtraps) && sizeof(dtraps)) -  foreach(dtraps, array dtrap1) { -  SNMPAGENT_MSG(sprintf("Delayed trap sent: %O", dtrap1)); -  //fd->trap( dtrap1[1], dtrap1[2], dtrap1[3]); +  foreach(dtraps, array dtrap1)    fd->trap( @dtrap1 ); -  } +     dtraps = ({});       enabled = 1;   #if NO_THREADS    // set callbacks    fd->set_nonblocking(process_query);   #else    // wait for connection    //while(1) process_query(fd->read());    while(enabled)
Roxen.git/server/base_server/snmpagent.pike:385:    remove_call_out(co);   #else    th = 0;   #endif    destruct(fd); // avoid fd leaking; FIXME: some cyclic dependencies in SNMP pmod.    fd = 0;    inited = 0;    SNMPAGENT_MSG("Shutdown complete.");    }    -  //! Cold start notificator. Sends trap for all virtual servers in the vsarr. -  void coldstart_trap() { +  // start/stop notificator +  private void x_trap(string oid, array|void val) {       object uri; -  +  int rtype = 6; +  mapping aval = ([oid: val]);    -  +  switch (oid) { +  +  case RISMIB_BASE_WEBSERVER: // a little hack, but only cold start is alowed to use such oid +  rtype = 0; +  break; +  +  case RISMIB_BASE_WEBSERVER_TRAPG_DOWN: +  break; +  +  } +  if(!arrayp(val)) +  aval = ([]);    foreach(query("snmp_global_traphosts"), string url) {    if(catch(uri = Standards.URI(url))) {    SNMPAGENT_MSG(sprintf("Traphost is invalid: %s !", url));    continue; // FIXME: what about possibility to add some warnings?    }    if(objectp(fd)) {    SNMPAGENT_MSG(sprintf("Trap sent: %s", url)); -  //foreach(indices(vsdb), int vsid) -  fd->trap( -  ([]), -  RISMIB_BASE_WEBSERVER, 0, 0, +  fd->trap( aval, +  oid, rtype, 0,    1, //FIXME: uptime    0, uri->host, uri->port );    } else { -  // mutex +     SNMPAGENT_MSG(sprintf("Trap delayed: %s", url)); -  //foreach(indices(vsdb), mixed vsid) -  dtraps += ({ ({ ([]), -  RISMIB_BASE_WEBSERVER, 0, 0, +  dtraps += ({ ({ aval, +  oid, rtype, 0,    1, //FIXME: uptime    0, uri->host, uri->port }) }); -  // unmutex +     }    }    }    - /* -  if(vsdb[vsid]->variables["snmp_traphosts"] && -  sizeof(vsdb[vsid]->variables["snmp_traphosts"]->query())) { -  SNMPAGENT_MSG(sprintf("server %O(#%d): traphosts:%O", -  vsdb[vsid]->name, vsid, -  vsdb[vsid]->variables["snmp_traphosts"]->query())); -  foreach(vsdb[vsid]->variables["snmp_traphosts"]->query(), mixed thost) { -  if(catch(uri = Standards.URI(thost))) { -  SNMPAGENT_MSG(sprintf("Traphost is invalid: %s !", thost)); -  continue; // FIXME: what about possibility to add some warnings? +  //! Start notificator. +  void start_trap() { +  +  x_trap(RISMIB_BASE_WEBSERVER);    } -  SNMPAGENT_MSG(sprintf("Trap sent: %s", thost)); - #if 1 -  fd->trap( -  ([RISMIB_BASE_WEBSERVER_TRAP_VSCOLD: -  ({ "count", vsid }) ]), -  //({ "str", Standards.URI(vsdb[vsid]->variables["MyWorldLocation"]->query())->host}) ]), -  uri->host, uri->port); - #endif +  +  //! Stop notificator. +  void stop_trap() { +  +  x_trap(RISMIB_BASE_WEBSERVER_TRAPG_DOWN);    } -  } else -  if(vsdb[vsid]) -  SNMPAGENT_MSG(sprintf("server %O(#%d) hasn't any traphosts.", -  vsdb[vsid] && vsdb[vsid]->name, vsid)); - */ +     -  +  //! Virtual server start notificator +  void vs_start_trap(int vsid) { +  x_trap(RISMIB_BASE_WEBSERVER_TRAP_VSSTART+".0", OBJ_INT(vsid)); +  } +  +  //! Virtual server stop notificator +  void vs_stop_trap(int vsid) { +  x_trap(RISMIB_BASE_WEBSERVER_TRAP_VSSTOP+".0", OBJ_INT(vsid)); +  } +     //! Warm start notificator    void warmstart_trap() {       }       //! Authentication failure notificator    void authfailure_trap() {       }       //! Enterprise specific trap notificator -  void enterprise_trap(int vsid, array attrvals) { +  void enterprise_trap(int vsid, mapping attrvals) {       object uri;       if(vsdb[vsid] && vsdb[vsid]->variables["snmp_traphosts"] &&    sizeof(vsdb[vsid]->variables["snmp_traphosts"]->query())) {    SNMPAGENT_MSG(sprintf("server %O(#%d): traphosts:%O",    vsdb[vsid]->name, vsid,    vsdb[vsid]->variables["snmp_traphosts"]->query()));    foreach(vsdb[vsid]->variables["snmp_traphosts"]->query(), mixed thost) {    if(catch(uri = Standards.URI(thost))) {    SNMPAGENT_MSG(sprintf("Traphost is invalid: %s !", thost));    continue; // FIXME: what about possibility to add some warnings?    }    SNMPAGENT_MSG(sprintf("Enterprise trap sent: %s", thost));    fd->trap( -  attrvals || ([RISMIB_BASE_WEBSERVER_TRAP_VSSPEC+".0": OBJ_STR(vsdb[vsid]->name)]), -  RISMIB_BASE_WEBSERVER_TRAP_VSSPEC, 6, 0, +  attrvals || ([RISMIB_BASE_WEBSERVER_TRAP_VSEXT+".0": OBJ_STR(vsdb[vsid]->name)]), +  RISMIB_BASE_WEBSERVER_TRAP_VSEXT, 6, 0,    1, //FIXME: uptime    0,    uri->host, uri->port);    }    } else    if(vsdb[vsid])    SNMPAGENT_MSG(sprintf("server %O(#%d) hasn't any traphosts.",    vsdb[vsid] && vsdb[vsid]->name, vsid));    }    -  //! Authentication failure notificator -  void vs_start_trap(int vsid) { -  -  enterprise_trap(vsid, 0); -  -  } -  +     //! Adds virtual server to the DB of managed objects    int add_virtserv(int vsid) {       if(zero_type(vsdb[vsid])) {    report_debug(sprintf("SNMPagent: added server %O(#%d)\n",    roxen->configurations[vsid]->name, vsid));    vsdb += ([vsid: roxen->configurations[vsid]]);    }       // some tabulars handlers ...
Roxen.git/server/base_server/snmpagent.pike:761:       //! External function for MIB object returning nothing    array get_null() { return OBJ_COUNT(0); }      } // SubMIBManager      // base external feeders      //! External function for MIB object 'system.sysDescr'   array get_description() { -  return OBJ_STR("Roxen Webserver SNMP agent v"+("$Revision: 1.17 $"/" ")[1]+" (devel. rel.)"); +  return OBJ_STR("Roxen Webserver SNMP agent v"+("$Revision: 1.18 $"/" ")[1]+" (devel. rel.)");   }      //! External function for MIB object 'system.sysOID'   array get_sysoid() {    return OBJ_OID(RISMIB_BASE_WEBSERVER);   }      //! External function for MIB object 'system.sysUpTime'   array get_uptime() {    return OBJ_TICK((time(1) - roxen->start_time)*100);