Beispiel #1
0
int
sg_warn(const char *prefix)
{
	sg_error_details err_det;
	char *errmsg = NULL;
	int rc;
	sg_error errc;

	if( SG_ERROR_NONE != ( errc = sg_get_error_details(&err_det) ) ) {
		fprintf(stderr, "can't get error details (%d, %s)\n", errc, sg_str_error(errc));
		return 0;
	}

	if( NULL == sg_strperror(&errmsg, &err_det) ) {
		errc = sg_get_error();
		fprintf(stderr, "panic: can't prepare error message (%d, %s)\n", errc, sg_str_error(errc));
		return 0;
	}

	rc = fprintf( stderr, "%s: %s\n", prefix, errmsg );

	free( errmsg );

	return rc;
}
Beispiel #2
0
static int do_init(void) {
#if HAVE_SETLOCALE
  if (setlocale(LC_NUMERIC, COLLECTD_LOCALE) == NULL)
    WARNING("setlocale (\"%s\") failed.", COLLECTD_LOCALE);

  /* Update the environment, so that libraries that are calling
   * setlocale(LC_NUMERIC, "") don't accidentally revert these changes. */
  unsetenv("LC_ALL");
  setenv("LC_NUMERIC", COLLECTD_LOCALE, /* overwrite = */ 1);
#endif

#if HAVE_LIBKSTAT
  kc = NULL;
  update_kstat();
#endif

#if HAVE_LIBSTATGRAB
  if (sg_init(
#if HAVE_LIBSTATGRAB_0_90
          0
#endif
          )) {
    ERROR("sg_init: %s", sg_str_error(sg_get_error()));
    return -1;
  }

  if (sg_drop_privileges()) {
    ERROR("sg_drop_privileges: %s", sg_str_error(sg_get_error()));
    return -1;
  }
#endif

  return plugin_init_all();
} /* int do_init () */
Beispiel #3
0
static void
sg_die(const char *prefix, int exit_code)
{
	sg_error_details err_det;
	char *errmsg = NULL;
	sg_error errc;

	if( SG_ERROR_NONE != ( errc = sg_get_error_details(&err_det) ) ) {
		fprintf(stderr, "panic: can't get error details (%d, %s)\n", errc, sg_str_error(errc));
		exit(exit_code);
	}

	if( NULL == sg_strperror(&errmsg, &err_det) ) {
		errc = sg_get_error();
		fprintf(stderr, "panic: can't prepare error message (%d, %s)\n", errc, sg_str_error(errc));
		exit(exit_code);
	}

	fprintf( stderr, "%s: %s\n", prefix, errmsg );

	free( errmsg );

	exit(exit_code);
}
bool
DataSourceStatgrab::ShutdownStatgrab()
{
    if( SG_ERROR_NONE != sg_shutdown() )
    {
        LOG_BEGIN(loggerModuleName, ERROR_LOG | 0);
        LOG("ShutdownDataSourceStatgrab(): sg_shutdown() failed");
        LOG(sg_str_error(sg_get_error()));
        LOG(sg_get_error_arg());
        LOG_END;

        return false;
    }

    return true;
}
void
DataSourceStatgrab::report_sg_error(string const &who, string const &what)
{
    sg_error_details err_det;
    char *errmsg = NULL;
    sg_error errc;

    if( SG_ERROR_NONE != ( errc = sg_get_error_details(&err_det) ) )
    {
        LOG_BEGIN( loggerModuleName, ERROR_LOG | 1 );
        LOG( string( string("report_sg_error(") + who + ", " + what + "): can't get error details - " + sg_str_error(errc) ).c_str() );
        LOG_END;
        return;
    }

    if( NULL == sg_strperror(&errmsg, &err_det) )
    {
        errc = sg_get_error();
        LOG_BEGIN( loggerModuleName, ERROR_LOG | 1 );
        LOG( string( string("report_sg_error(") + who + ", " + what + "): can't prepare error message - " + sg_str_error(errc) ).c_str() );
        LOG_END;
        return;
    }

    LOG_BEGIN( loggerModuleName, ERROR_LOG | 1 );
    if( errmsg )
    {
        LOG( string( who + ": " + what + " - " + errmsg ).c_str() );
    }
    else
    {
        LOG( string( who + ": " + what + " - " + sg_str_error( sg_get_error() ) + " - unknown details" ).c_str() );
    }
    LOG_END;

    free( errmsg );

    return;
}
Beispiel #6
0
int main(int argc, char **argv){
	int c;
	int colouron = 0;

	char *fslist = NULL;

	time_t last_update = 0;

	extern int errno;

	int delay=2;

	sg_log_init("saidar", "SAIDAR_LOG_PROPERTIES", argc ? argv[0] : NULL);
	sg_init(1);
	if(sg_drop_privileges() != 0){
		fprintf(stderr, "Failed to drop setuid/setgid privileges\n");
		return 1;
	}

#ifdef COLOR_SUPPORT
	while ((c = getopt(argc, argv, "d:F:cvh")) != -1){
#else
	while ((c = getopt(argc, argv, "d:F:vh")) != -1){
#endif
		switch (c){
			case 'd':
				delay = atoi(optarg);
				if (delay < 1){
					fprintf(stderr, "Time must be 1 second or greater\n");
					exit(1);
				}
				break;
#ifdef COLOR_SUPPORT
			case 'c':
				colouron = 1;
				break;
#endif
			case 'v':
				version_num(argv[0]);
				break;
			case 'h':
			default:
				usage(argv[0]);
				return 1;
		}
	}

	if (fslist) {
		sg_error rc = set_valid_filesystems(fslist);
		if(rc != SG_ERROR_NONE)
			die(sg_str_error(rc));
		free(fslist);
	}
	else {
		sg_error rc = set_valid_filesystems("!nfs, nfs3, nfs4, cifs, smbfs, samba, autofs");
		if(rc != SG_ERROR_NONE)
			die(sg_str_error(rc));
	}

	signal(SIGWINCH, sig_winch_handler);
	initscr();
#ifdef COLOR_SUPPORT
	/* turn on colour */
	if (colouron) {
		if (has_colors()) {
			start_color();
			use_default_colors();
			init_pair(1,COLOR_RED,-1);
			init_pair(2,COLOR_GREEN,-1);
			init_pair(3,COLOR_YELLOW,-1);
			init_pair(4,COLOR_BLUE,-1);
			init_pair(5,COLOR_MAGENTA,-1);
			init_pair(6,COLOR_CYAN,-1);
		} else {
			fprintf(stderr, "Colour support disabled: your terminal does not support colour.");
			colouron = 0;
		}
	}
#endif
	nonl();
	curs_set(0);
	cbreak();
	noecho();
	timeout(delay * 1000);
	newwin(0, 0, 0, 0);
	clear();

	if(!get_stats()){
		fprintf(stderr, "Failed to get all the stats. Please check correct permissions\n");
		endwin();
		return 1;
	}

	display_headings();

	for(;;){
		time_t now;
		int ch = getch();

		if (ch == 'q'){
			break;
		}

		/* To keep the numbers slightly accurate we do not want them
		 * updating more frequently than once a second.
		 */
		now = time(NULL);
		if ((now - last_update) >= 1) {
			get_stats();
		}
		last_update = now;

		if(sig_winch_flag) {
			clear();
			display_headings();
			sig_winch_flag = 0;
		}

		display_data(colouron);
	}

	endwin();
	sg_shutdown();
	return 0;
}
Beispiel #7
0
/*
 * Get the latest error from statgrab and, if there is one,
 * raise the corresponding Ruby exception with the error message.
 * Only used internally.
 */
static void
statgrab_handle_error(void)
{
	sg_error err_num;
	err_num = sg_get_error();

	switch(err_num) {
	case SG_ERROR_NONE:
		return;
	case SG_ERROR_ASPRINTF:
		rb_raise(eStatgrabAsprintfError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_DEVICES:
		rb_raise(eStatgrabDevicesError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_DEVSTAT_GETDEVS:
		rb_raise(eStatgrabDevstatGetdevsError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_DEVSTAT_SELECTDEVS:
		rb_raise(eStatgrabDevstatSelectdevsError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_DISKINFO:
		rb_raise(eStatgrabDiskinfoError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_ENOENT:
		rb_raise(eStatgrabEnoentError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_GETIFADDRS:
		rb_raise(eStatgrabGetifaddrsError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_GETMNTINFO:
		rb_raise(eStatgrabGetmntinfoError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_GETPAGESIZE:
		rb_raise(eStatgrabGetpagesizeError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_HOST:
		rb_raise(eStatgrabHostError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_KSTAT_DATA_LOOKUP:
		rb_raise(eStatgrabKstatDataLookupError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_KSTAT_LOOKUP:
		rb_raise(eStatgrabKstatLookupError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_KSTAT_OPEN:
		rb_raise(eStatgrabKstatOpenError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_KSTAT_READ:
		rb_raise(eStatgrabKstatReadError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_KVM_GETSWAPINFO:
		rb_raise(eStatgrabKvmGetswapinfoError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_KVM_OPENFILES:
		rb_raise(eStatgrabKvmOpenfilesError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_MALLOC:
		rb_raise(eStatgrabMallocError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_MEMSTATUS:
		rb_raise(eStatgrabMemstatusError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_OPEN:
		rb_raise(eStatgrabOpenError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_OPENDIR:
		rb_raise(eStatgrabOpendirError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_PARSE:
		rb_raise(eStatgrabParseError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_PDHADD:
		rb_raise(eStatgrabPdhaddError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_PDHCOLLECT:
		rb_raise(eStatgrabPdhcollectError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_PDHOPEN:
		rb_raise(eStatgrabPdhopenError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_PDHREAD:
		rb_raise(eStatgrabPdhreadError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_PERMISSION:
		rb_raise(eStatgrabPermissionError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_PSTAT:
		rb_raise(eStatgrabPstatError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_SETEGID:
		rb_raise(eStatgrabSetegidError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_SETEUID:
		rb_raise(eStatgrabSeteuidError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_SETMNTENT:
		rb_raise(eStatgrabSetmntentError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_SOCKET:
		rb_raise(eStatgrabSocketError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_SWAPCTL:
		rb_raise(eStatgrabSwapctlError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_SYSCONF:
		rb_raise(eStatgrabSysconfError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_SYSCTL:
		rb_raise(eStatgrabSysctlError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_SYSCTLBYNAME:
		rb_raise(eStatgrabSysctlbynameError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_SYSCTLNAMETOMIB:
		rb_raise(eStatgrabSysctlnametomibError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_UNAME:
		rb_raise(eStatgrabUnameError, "%s", sg_str_error(err_num));
		break;
	case SG_ERROR_UNSUPPORTED:
		rb_raise(eStatgrabUnsupportedError, "%s",
				sg_str_error(err_num));
		break;
	case SG_ERROR_XSW_VER_MISMATCH:
		rb_raise(eStatgrabXswVerMismatchError, "%s",
				sg_str_error(err_num));
		break;
	}
}
Beispiel #8
0
char *
sg_strperror(char **buf, const sg_error_details * const err_details) {

#ifdef HAVE_STRERROR_R
	char errno_buf[128] = { '\0' };
#endif
	char *errno_msg = NULL;
	sg_error_details err_det;

	if((NULL == buf) || (NULL != *buf)) {
		sg_set_error_int(SG_ERROR_INVALID_ARGUMENT, 0, "strperror", empty_ap);
		return NULL;
	}

	if(NULL == err_details) {
		sg_get_error_details(&err_det);
	}
	else {
		err_det = *err_details;
	}

	if( NULL != (*buf = malloc(SG_STRPERROR_BUF_SIZE)) ) {
		if(err_det.errno_value) {
#ifdef HAVE_STRERROR_R
# ifdef STRERROR_R_RETURN_INT
			int rc;
# else
			char *rc;
# endif
			rc = strerror_r(err_det.errno_value, errno_buf, sizeof(errno_buf));
# ifdef STRERROR_R_RETURN_INT
			if(0 != rc)
# else
			if(NULL == rc)
# endif
			{
				sg_set_error_int(SG_ERROR_MALLOC, errno, "strerror_r", empty_ap);
				free(*buf);
				*buf = NULL;
				return NULL;
			}
			else {
# ifdef STRERROR_R_RETURN_INT
				errno_msg = errno_buf;
# else
				errno_msg = rc;
# endif
			}
#else
			errno_msg = strerror(errno);
#endif
		}

		snprintf( *buf, SG_STRPERROR_BUF_SIZE, "%s (%s%s%s)",
			  sg_str_error(err_det.error),
			  err_det.errno_value ? errno_msg : "",
			  err_det.errno_value ? ": " : "",
			  err_det.error_arg ? err_det.error_arg : "" );

	}
	else {
		sg_set_error_int(SG_ERROR_MALLOC, 0, "sg_strperror", empty_ap);
	}

	return *buf;
}