示例#1
0
文件: upslog.c 项目: alezz/nut
static void getvar(const char *var)
{
	int	ret;
	unsigned int	numq, numa;
	const	char	*query[4];
	char	**answer;

	query[0] = "VAR";
	query[1] = upsname;
	query[2] = var;
	numq = 3;

	ret = upscli_get(&ups, numq, query, &numa, &answer);

	if ((ret < 0) || (numa < numq)) {
		snprintfcat(logbuffer, sizeof(logbuffer), "NA");
		return;
	}

	snprintfcat(logbuffer, sizeof(logbuffer), "%s", answer[3]);
}
示例#2
0
文件: upsrw.c 项目: AlexLov/nut
static const char *get_data(const char *type, const char *varname)
{
	int	ret;
	unsigned int	numq, numa;
	char	**answer;
	const char	*query[4];

	query[0] = type;
	query[1] = upsname;
	query[2] = varname;

	numq = 3;

	ret = upscli_get(ups, numq, query, &numa, &answer);

	if ((ret < 0) || (numa < numq)) {
		return NULL;
	}

	/* <type> <upsname> <varname> <desc> */
	return answer[3];
}
示例#3
0
文件: upsmon.c 项目: ThomasKurz/nut
static int get_var(utype_t *ups, const char *var, char *buf, size_t bufsize)
{
    int	ret;
    unsigned int	numq, numa;
    const	char	*query[4];
    char	**answer;

    /* this shouldn't happen */
    if (!ups->upsname) {
        upslogx(LOG_ERR, "get_var: programming error: no UPS name set [%s]",
                ups->sys);
        return -1;
    }

    numq = 0;

    if (!strcmp(var, "numlogins")) {
        query[0] = "NUMLOGINS";
        query[1] = ups->upsname;
        numq = 2;
    }

    if (!strcmp(var, "status")) {
        query[0] = "VAR";
        query[1] = ups->upsname;
        query[2] = "ups.status";
        numq = 3;
    }

    if (numq == 0) {
        upslogx(LOG_ERR, "get_var: programming error: var=%s", var);
        return -1;
    }

    upsdebugx(3, "%s: %s / %s", __func__, ups->sys, var);

    ret = upscli_get(&ups->conn, numq, query, &numa, &answer);

    if (ret < 0) {

        /* detect old upsd */
        if (upscli_upserror(&ups->conn) == UPSCLI_ERR_UNKCOMMAND) {

            upslogx(LOG_ERR, "UPS [%s]: Too old to monitor",
                    ups->sys);
            return -1;
        }

        /* some other error */
        return -1;
    }

    if (numa < numq) {
        upslogx(LOG_ERR, "%s: Error: insufficient data "
                "(got %d args, need at least %d)",
                var, numa, numq);
        return -1;
    }

    snprintf(buf, bufsize, "%s", answer[numq]);
    return 0;
}