Print this page
7711 SMF: Finish implementing support for degraded state

*** 21,30 **** --- 21,31 ---- /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * Copyright (c) 2015, Joyent, Inc. All rights reserved. + * Copyright 2017 RackTop Systems. */ /* * Service state explanation. For select services, display a description, the * state, and possibly why the service is in that state, what's causing it to
*** 1194,1203 **** --- 1195,1207 ---- /* * If we're running, add a self-pointer in case we're * excluding another service. */ add_svcptr(svcp->causes, svcp); + if (strcmp(svcp->state, SCF_STATE_STRING_DEGRADED) == 0) + add_svcptr(g_causes, svcp); + return (UU_WALK_NEXT); } if (strcmp(svcp->state, SCF_STATE_STRING_MAINT) == 0) { add_svcptr(svcp->causes, svcp);
*** 1486,1495 **** --- 1490,1503 ---- sizeof (buf)); } else if (WEXITSTATUS(stat) == SMF_EXIT_ERR_FATAL) { (void) strlcpy(buf, gettext( "exited with $SMF_EXIT_ERR_FATAL"), sizeof (buf)); + } else if (WEXITSTATUS(stat) == SMF_EXIT_MON_DEGRADE) { + (void) strlcpy(buf, gettext( + "exited with $SMF_EXIT_MON_DEGRADE"), + sizeof (buf)); } else { (void) snprintf(buf, sizeof (buf), gettext("exited with status %d"), WEXITSTATUS(stat)); }
*** 1806,1826 **** svcp->next_state); dc = DC_TRANSITION; } } else if (strcmp(svcp->state, SCF_STATE_STRING_DEGRADED) == 0) { ! (void) puts(gettext("Reason: Degraded by an administrator.")); dc = DC_ADMINDEGR; } else { (void) printf(gettext("Reason: Not in valid state (%s).\n"), svcp->state); dc = DC_INVALIDSTATE; } diagcode: ! if (g_msgbase != NULL) (void) printf(gettext(" See: %s%s\n"), g_msgbase, dc); } static void print_manpage(int verbose) --- 1814,1851 ---- svcp->next_state); dc = DC_TRANSITION; } } else if (strcmp(svcp->state, SCF_STATE_STRING_DEGRADED) == 0) { ! if (strcmp(svcp->aux_state, "administrative_request") == 0) { ! (void) puts(gettext("Reason: Degraded by an " ! "administrator.")); dc = DC_ADMINDEGR; + } else if (strcmp(svcp->aux_state, "service_request") == 0) { + if (svcp->aux_fmri) { + (void) printf(gettext("Reason: Degraded by " + "\"%s\"\n"), svcp->aux_fmri); + print_aux_fmri_logs(svcp->aux_fmri); + } else { + (void) puts(gettext("Reason: Degraded by " + "another service.")); + } + } else if (strcmp(svcp->aux_state, "method_failed") == 0) { + print_method_failure(svcp, &dc); + } else { + (void) puts(gettext("Reason: Unknown.")); + dc = DC_UNKNOWN; + } } else { (void) printf(gettext("Reason: Not in valid state (%s).\n"), svcp->state); dc = DC_INVALIDSTATE; } diagcode: ! if (g_msgbase != NULL && dc != NULL) (void) printf(gettext(" See: %s%s\n"), g_msgbase, dc); } static void print_manpage(int verbose)