Esempio n. 1
0
static PyObject *
Libgenders_errormsg(Libgenders *self)
{
  char *str;
  PyObject *rv = NULL;

  str = genders_errormsg(self->gh);

  if (!(rv = Py_BuildValue("s", str)))
    goto cleanup;

 cleanup:
  return rv;
}
/*
 * genders_clusterlist_node_in_cluster
 *
 * genders clusterlist module node_in_cluster function
 */
static int
genders_clusterlist_node_in_cluster(const char *node)
{
  char nodebuf[CEREBRO_MAX_NODENAME_LEN+1];
  char *nodePtr = NULL;
  int flag;

  if (!gh)
    {
      CEREBRO_DBG(("gh null"));
      return -1;
    }

  if (!node)
    {
      CEREBRO_DBG(("invalid parameters"));
      return -1;
    }

  /* Shorten hostname if necessary */
  if (strchr(node, '.'))
    {
      char *p;

      memset(nodebuf, '\0', CEREBRO_MAX_NODENAME_LEN+1);
      strncpy(nodebuf, node, CEREBRO_MAX_NODENAME_LEN);
      p = strchr(nodebuf, '.');
      *p = '\0';
      nodePtr = nodebuf;
    }
  else
    nodePtr = (char *)node;

  if ((flag = genders_isnode(gh, nodePtr)) < 0)
    {
      CEREBRO_ERR(("genders_isnode: %s", genders_errormsg(gh)));
      return -1;
    }

  return flag;
}
static int
query_status(mysql_connection_t *conn)
{
	int rc = 0;
	unsigned int  num_fields;
	unsigned int  num_rows, i;
	uint64_t      errors = 0;
	MYSQL_RES    *res;
	MYSQL_ROW     row;
#if HAVE_LIBGENDERS
	genders_t genders_handle;
	char        **nodes = NULL;
	int           num_nodes = 0;
	switch_error_sum_t switch_error_sum;

	memset(&switch_error_sum, 0, (sizeof switch_error_sum));
#endif

	/* issue the query join for any errors */
	if (QUERY(conn,
			"select pe.SymbolErrors, pe.LinkRecovers,"
			" pe.LinkDowned, pe.RcvErrors, pe.RcvRemotePhysErrors,"
			" pe.RcvSwitchRelayErrors, pe.XmtDiscards,"
			" pe.XmtConstraintErrors, pe.RcvConstraintErrors,"
			" pe.LinkIntegrityErrors, pe.ExcBufOverrunErrors,"
			" pe.VL15Dropped, n.name, pe.port, n.guid"
			" from port_errors as pe,nodes as n where n.guid=pe.guid;")) {
		fprintf(stderr, "Failed to query node errors\n");
		return (1);
	}

	res = mysql_store_result(conn->conn);

	if ((num_fields = mysql_num_fields(res)) != 15) {
		fprintf(stderr, "%s:%d Failed to query status %d != 14\n",
			__FUNCTION__, __LINE__, num_fields);
		rc = 1;
		goto free_res;
	}

	num_rows = mysql_num_rows(res);

#if HAVE_LIBGENDERS
	genders_handle = genders_handle_create();
	if (!genders_handle || genders_load_data(genders_handle, NULL)) {
		fprintf(stderr, "Genders load failed: %s\n", genders_handle ?
			genders_errormsg(genders_handle)
			: "handle creation failed");
		goto genders_open_fail;
	}
#endif

	/* The basic algo is to sum up all the errors and report them together */
	for (i = 0; i < num_rows; i++) {
		char node_desc[65];
		char *node_name = NULL;

		row = mysql_fetch_row(res);

		/* add up all the errors reported. */
		errors = 0;
		errors += COL_TO_UINT64(0);
		errors += COL_TO_UINT64(1);
		errors += COL_TO_UINT64(2);
		errors += COL_TO_UINT64(3);
		errors += COL_TO_UINT64(4);
		errors += COL_TO_UINT64(5);
		errors += COL_TO_UINT64(6);
		errors += COL_TO_UINT64(7);
		errors += COL_TO_UINT64(8);
		errors += COL_TO_UINT64(9);
		errors += COL_TO_UINT64(10);
		errors += COL_TO_UINT64(11);

#if HAVE_LIBGENDERS
		if (sum_fabric_errors && !genders_isnode(genders_handle, row[12])) {
			switch_error_sum.SymbolErrors         += COL_TO_UINT64(0);
			switch_error_sum.LinkRecovers         += COL_TO_UINT64(1);
			switch_error_sum.LinkDowned           += COL_TO_UINT64(2);
			switch_error_sum.RcvErrors            += COL_TO_UINT64(3);
			switch_error_sum.RcvRemotePhysErrors  += COL_TO_UINT64(4);
			switch_error_sum.RcvSwitchRelayErrors += COL_TO_UINT64(5);
			switch_error_sum.XmtDiscards          += COL_TO_UINT64(6);
			switch_error_sum.XmtConstraintErrors  += COL_TO_UINT64(7);
			switch_error_sum.RcvConstraintErrors  += COL_TO_UINT64(8);
			switch_error_sum.LinkIntegrityErrors  += COL_TO_UINT64(9);
			switch_error_sum.ExcBufOverrunErrors  += COL_TO_UINT64(10);
			switch_error_sum.VL15Dropped          += COL_TO_UINT64(11);
		}
#endif

		strncpy(node_desc, row[12], 64);
		node_name = remap_node_name(node_name_map, COL_TO_UINT64(14), node_desc);
		clean_node_name(node_name);
		printf("%s,ibport%s-error_sum,%"PRIuLEAST64"\n",
			node_name, row[13], errors);
		free(node_name);
	}

#if HAVE_LIBGENDERS
	if (sum_fabric_errors) {
		printf("%s,SymbolErrors_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.SymbolErrors);
		printf("%s,SymbolErrors_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.SymbolErrors);

		printf("%s,LinkRecovers_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.LinkRecovers);
		printf("%s,LinkRecovers_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.LinkRecovers);

		printf("%s,LinkDowned_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.LinkDowned);
		printf("%s,LinkDowned_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.LinkDowned);

		printf("%s,RcvErrors_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.RcvErrors);
		printf("%s,RcvErrors_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.RcvErrors);

		printf("%s,RcvRemotePhysErrors_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.RcvRemotePhysErrors);
		printf("%s,RcvRemotePhysErrors_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.RcvRemotePhysErrors);

		printf("%s,RcvSwitchRelayErrors_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.RcvSwitchRelayErrors);
		printf("%s,RcvSwitchRelayErrors_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.RcvSwitchRelayErrors);

		printf("%s,XmtDiscards_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.XmtDiscards);
		printf("%s,XmtDiscards_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.XmtDiscards);

		printf("%s,XmtConstraintErrors_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.XmtConstraintErrors);
		printf("%s,XmtConstraintErrors_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.XmtConstraintErrors);

		printf("%s,RcvConstraintErrors_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.RcvConstraintErrors);
		printf("%s,RcvConstraintErrors_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.RcvConstraintErrors);

		printf("%s,LinkIntegrityErrors_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.LinkIntegrityErrors);
		printf("%s,LinkIntegrityErrors_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.LinkIntegrityErrors);

		printf("%s,ExcBufOverrunErrors_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.ExcBufOverrunErrors);
		printf("%s,ExcBufOverrunErrors_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.ExcBufOverrunErrors);

		printf("%s,VL15Dropped_sum,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.VL15Dropped);
		printf("%s,VL15Dropped_sum_counter,%"PRIuLEAST64"\n",
			IB_SWITCH_TOTAL_NODE_NAME,
			switch_error_sum.VL15Dropped);
	}
genders_open_fail:
	genders_handle_destroy(genders_handle);
#endif

free_res:
	mysql_free_result(res);
	return (rc);
}