Commit 34d49daf authored by Seblu's avatar Seblu
Browse files

Ajout d'un system de log

Amelioration de la gestion de rupture de connexion
parent 24f0839c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@ sld_SOURCES= src/sld.hh \
		src/options.cc		\
		src/daemon.hh		\
		src/daemon.cc		\
		src/log.hh		\
		src/log.cc		\
		src/error.hh		\
		src/error.cc

+3 −0
Original line number Diff line number Diff line
IMPROVMENTS:
remove static magic MAX_LINE_SIZE in sscanf
Print start date and stop date in log file
effacer les scripts avant de quitter
Ajout une fonction qui delete un script

BUG:
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ retrydelay=5
# 0 = quiete
# 1 = normale
# 2 = verbose
verbose=1
verbose=2

# Every out (stdout and sterr) are also printed in this file
# Default = none
+18 −14
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ void SLDaemon::run() {
  char *line;

  if (verbose())
    std::cout << options;
    logout << options;
  check_options();
  clean_dir(options.scriptdir);
 net_connect:
@@ -92,7 +92,7 @@ void SLDaemon::run() {
	  throw;
	else {
	  sendln(e.message());
	  std::cerr << "!! " << e.message() << std::endl;
	  logerr << "!! " << e.message() << "\n";
	}
      }
      delete[] line;
@@ -102,6 +102,10 @@ void SLDaemon::run() {
  catch (const Error &e) {
    if (e.code() != ERR_NET)
      throw;
    if (verbose())
      logerr << "Connexion lost. Retrying in " << options.retrydelay << " seconds.\n";
    fclose(socket_fs_);
    socket_fs_ = 0;
    sleep(options.retrydelay);
    goto net_connect;
  }
@@ -115,9 +119,8 @@ void SLDaemon::connect() {
  struct sockaddr_in daddr;
  struct hostent *h;

  // close existing connexion
  if (socket_fs_ != 0)
    disconnect();
  // Check no existing connexion
  assert(socket_fs_ == 0);

  // retrieve remote host info
  h = gethostbyname(options.server.c_str());
@@ -135,16 +138,16 @@ void SLDaemon::connect() {
  memset(daddr.sin_zero, '\0', sizeof daddr.sin_zero);

  if (verbose())
    std::cout << "Connecting to " << h->h_name << " (" << inet_ntoa(*(struct in_addr*)h->h_addr)
	      << ") on port " << options.port << "..." << std::endl;
    logout << "Connecting to " << h->h_name << " (" << inet_ntoa(*(struct in_addr*)h->h_addr)
	   << ") on port " << options.port << "...\n";

  // connect
  if (::connect(socket_fd_, (struct sockaddr *) &daddr, sizeof daddr) == -1)
    throw Error(ERR_NET, strerror(errno));

  if (verbose())
    std::cout << "Connected to " << h->h_name << " (" << inet_ntoa(*(struct in_addr*)h->h_addr)
	      << ") on port " << options.port << "..." << std::endl;
    logout << "Connected to " << h->h_name << " (" << inet_ntoa(*(struct in_addr*)h->h_addr)
	   << ") on port " << options.port << "...\n";

  // initialize socket stream
  if ((socket_fs_ = fdopen(socket_fd_, "r+")) == 0)
@@ -157,7 +160,7 @@ void SLDaemon::disconnect() {
  if (fclose(socket_fs_))
    throw Error(ERR_NET, strerror(errno));
  if (verbose())
    std::cout << "Connection closed." << std::endl;
    logout << "Connection closed.\n";
  socket_fs_ = 0;
}

@@ -182,7 +185,7 @@ void SLDaemon::sendln(const string &s) {
  if (!fprintf(socket_fs_, "%s\n", s.c_str()))
    throw Error(ERR_NET, strerror(errno));
  if (verbose())
    std::cout << SND_DATA << s << std::endl;
    logout << SND_DATA << s << "\n";
}

char *SLDaemon::recv(size_t size) {
@@ -217,7 +220,7 @@ char *SLDaemon::recvln() {
    throw Error(ERR_FILE, (string) "recvln: " + strerror(errno));
  }
  if (verbose())
    std::cout << RCV_DATA << line;
    logout << RCV_DATA << line;

  return line;
}
@@ -546,7 +549,8 @@ void SLDaemon::cmd_list() {
  try {
    while ((len = fread(buf, 1, 255, fls)) > 0)
      send(buf, len);
    if (verbose()) std::cout << "LIST: data send." << std::endl;
    if (verbose())
      logout << "LIST: data send.\n";
    flush();
  }
  catch (...) {
@@ -686,7 +690,7 @@ void sigchild(int) {
		 WEXITSTATUS(status));
	write(d.socket_fd_, buf, strlen(buf));
	if (d.verbose())
	  std::cout << SND_DATA << buf;
	  logout << SND_DATA << buf;
	jobs_.erase(i);
	break;
      }

sld/trunk/src/log.cc

0 → 100644
+59 −0
Original line number Diff line number Diff line
#include <unistd.h>
#include <iostream>
#include <fstream>
#include "error.h"
#include "log.hh"


Logger logout(std::cout);
Logger logerr(std::cerr);

Logger::Logger(std::ostream &o, const string &file) : flux_(o) {
  this->file(file);
}

Logger::~Logger() {
  if (logfile_ != 0)
    logfile_.close();
}

bool Logger::file(const string &filename) {
  // close previous logfile
  if (logfile_.is_open())
    logfile_.close();

  // open
  logfile_.open(filename.c_str());
  return logfile_.is_open();
}

bool Logger::has_file() const {
  return logfile_.is_open();
}

Logger &operator<<(Logger &l, const string &s) {
  l.flux_ << s;
  if (l.has_file()) {
    l.logfile_ << s;
    l.logfile_.flush();
  }
  return l;
}

Logger &operator<<(Logger &l, const char *s) {
  l.flux_ << s;
  if (l.has_file()) {
    l.logfile_ << s;
    l.logfile_.flush();
  }
  return l;
}

Logger &operator<<(Logger &l, int i) {
  l.flux_ << i;
  if (l.has_file()) {
    l.logfile_ << i;
    l.logfile_.flush();
  }
  return l;
}
Loading