2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 #include <afs/param.h>
18 #include "svc_viewlog.h"
25 * PROTOTYPES _________________________________________________________________
29 void Problems_OnInitDialog (HWND hDlg, LPIDENT lpi);
30 void Problems_OnRefresh (HWND hDlg, LPIDENT lpi);
31 void Problems_OnRedraw (HWND hDlg, LPIDENT lpi);
32 void Problems_OnRemedy (HWND hDlg, LPIDENT lpi);
36 * ROUTINES ___________________________________________________________________
40 BOOL CALLBACK Problems_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
42 if (AfsAppLib_HandleHelp (IDD_SVR_PROBLEMS, hDlg, msg, wp, lp))
45 if (msg == WM_INITDIALOG)
46 SetWindowLongPtr (hDlg, DWLP_USER, ((LPPROPSHEETPAGE)lp)->lParam);
48 LPIDENT lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
53 NotifyMe (WHEN_OBJECT_CHANGES, lpi, hDlg, 0);
54 Problems_OnInitDialog (hDlg, lpi);
55 Problems_OnRefresh (hDlg, lpi);
58 case WM_NOTIFY_FROM_DISPATCH:
59 Problems_OnRefresh (hDlg, lpi);
60 Delete ((LPNOTIFYSTRUCT)lp);
64 DontNotifyMeEver (hDlg);
70 case IDC_PROBLEM_REMEDY:
71 Problems_OnRemedy (hDlg, lpi);
76 case WM_CTLCOLORSTATIC:
77 if ((HWND)lp == GetDlgItem (hDlg, IDC_PROBLEM_TEXT))
79 SetBkColor ((HDC)wp, GetSysColor (COLOR_WINDOW));
80 return CreateSolidBrush (GetSysColor (COLOR_WINDOW))?TRUE:FALSE;
87 posOld = GetScrollPos (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL);
116 memset (&si, 0x00, sizeof(si));
117 si.cbSize = sizeof(si);
118 si.fMask = SIF_RANGE;
119 GetScrollInfo (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL, &si);
120 posNew = limit (0, posNew, si.nMax);
122 if (posNew != posOld)
124 SetScrollPos (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL, posNew, (LOWORD(wp) == SB_THUMBTRACK) ? FALSE : TRUE);
125 Problems_OnRedraw (hDlg, lpi);
134 void Problems_OnInitDialog (HWND hDlg, LPIDENT lpi)
136 TCHAR szText[ cchRESOURCE ];
137 GetDlgItemText (hDlg, IDC_PROBLEM_TITLE, szText, cchRESOURCE);
139 LPTSTR pszTitle = NULL;
141 if (lpi->fIsServer())
143 TCHAR szServer[ cchNAME ];
144 lpi->GetServerName (szServer);
145 pszTitle = FormatString (szText, TEXT("%s"), szServer);
147 else if (lpi->fIsService())
149 TCHAR szServer[ cchNAME ];
150 TCHAR szService[ cchNAME ];
151 lpi->GetServerName (szServer);
152 lpi->GetServiceName (szService);
153 pszTitle = FormatString (szText, TEXT("%s%s"), szServer, szService);
155 else if (lpi->fIsAggregate())
157 TCHAR szServer[ cchNAME ];
158 TCHAR szAggregate[ cchNAME ];
159 lpi->GetServerName (szServer);
160 lpi->GetAggregateName (szAggregate);
161 pszTitle = FormatString (szText, TEXT("%s%s"), szServer, szAggregate);
163 else if (lpi->fIsFileset())
165 TCHAR szServer[ cchNAME ];
166 TCHAR szAggregate[ cchNAME ];
167 TCHAR szFileset[ cchNAME ];
168 lpi->GetServerName (szServer);
169 lpi->GetAggregateName (szAggregate);
170 lpi->GetFilesetName (szFileset);
171 pszTitle = FormatString (szText, TEXT("%s%s%s"), szServer, szAggregate, szFileset);
174 if (pszTitle == NULL)
175 SetDlgItemText (hDlg, IDC_PROBLEM_TITLE, TEXT(""));
178 SetDlgItemText (hDlg, IDC_PROBLEM_TITLE, pszTitle);
179 FreeString (pszTitle);
182 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SW_HIDE);
183 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), SW_HIDE);
184 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), SW_HIDE);
185 SetDlgItemText (hDlg, IDC_PROBLEM_TEXT, TEXT(""));
189 void Problems_OnRefresh (HWND hDlg, LPIDENT lpi)
191 size_t nAlerts = Alert_GetCount (lpi);
193 LPTSTR pszText = FormatString (IDS_PROBLEM_BOX, TEXT("%lu"), nAlerts);
194 SetDlgItemText (hDlg, IDC_PROBLEM_BOX, pszText);
195 FreeString (pszText);
200 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SW_HIDE);
201 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), SW_HIDE);
202 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), SW_HIDE);
204 TCHAR szText[ cchRESOURCE ];
205 if (lpi->fIsServer())
206 GetString (szText, IDS_SERVER_NO_PROBLEMS);
207 else if (lpi->fIsService())
208 GetString (szText, IDS_SERVICE_NO_PROBLEMS);
209 else if (lpi->fIsAggregate())
210 GetString (szText, IDS_AGGREGATE_NO_PROBLEMS);
211 else if (lpi->fIsFileset())
212 GetString (szText, IDS_FILESET_NO_PROBLEMS);
214 wsprintf (szText, TEXT("UNEXPECTED CONDITION in problems.cpp"));
216 SetDlgItemText (hDlg, IDC_PROBLEM_TEXT, szText);
220 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SW_HIDE);
221 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), SW_HIDE);
222 Problems_OnRedraw (hDlg, lpi);
225 default: // two or more
226 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SW_SHOW);
227 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), SW_SHOW);
230 si.cbSize = sizeof(si);
231 si.fMask = SIF_RANGE | SIF_POS | SIF_PAGE;
233 si.nMax = (int)(nAlerts-1);
238 SetScrollInfo (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL, &si, TRUE);
239 Problems_OnRedraw (hDlg, lpi);
245 void Problems_OnRedraw (HWND hDlg, LPIDENT lpi)
249 if (IsWindowVisible (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL)))
251 iAlert = GetScrollPos (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL);
254 TCHAR szText[ cchRESOURCE ];
255 wsprintf (szText, TEXT("%lu:"), 1+iAlert);
256 SetWindowText (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), szText);
258 LPTSTR pszText1 = Alert_GetDescription (lpi, iAlert, TRUE);
259 LPTSTR pszText2 = Alert_GetRemedy (lpi, iAlert);
260 LPTSTR pszText3 = Alert_GetButton (lpi, iAlert);
262 LPTSTR pszProblem = FormatString (TEXT("%1\n\n%2"), TEXT("%s%s"),
263 (pszText1) ? pszText1 : TEXT(""),
264 (pszText2) ? pszText2 : TEXT(""));
265 SetWindowText (GetDlgItem (hDlg, IDC_PROBLEM_TEXT), pszProblem);
266 FreeString (pszProblem);
268 if (pszText3 == NULL)
269 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), SW_HIDE);
272 SetWindowText (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), pszText3);
273 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), SW_SHOW);
276 FreeString (pszText3);
277 FreeString (pszText2);
278 FreeString (pszText1);
282 void Problems_OnRemedy (HWND hDlg, LPIDENT lpi)
284 int iAlert = GetScrollPos (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL);
286 LPIDENT lpiTarget = Alert_GetIdent (lpi, iAlert);
287 ALERT alert = Alert_GetAlert (lpi, iAlert);
292 if (lpiTarget && lpiTarget->fIsCell())
294 StartTask (taskREFRESH, NULL, lpiTarget);
298 StartTask (taskREFRESH, NULL, lpiTarget->GetServer());
303 if (lpiTarget && lpiTarget->fIsFileset())
305 size_t nAlerts = Alert_GetCount (lpiTarget);
306 Filesets_ShowProperties (lpiTarget, nAlerts, TRUE);
308 else if (lpiTarget && lpiTarget->fIsAggregate())
310 size_t nAlerts = Alert_GetCount (lpiTarget);
311 Aggregates_ShowProperties (lpiTarget, nAlerts, TRUE);
315 case alertNO_VLDBENT:
316 // No button in this case
320 // No button in this case
324 Services_ShowServiceLog (lpiTarget);
332 // No button in this case
335 case alertSTATE_NO_VNODE:
336 case alertSTATE_NO_SERVICE:
337 case alertSTATE_OFFLINE:
338 // No button in these cases
349 void ParseFilesetName (LPIDENT lpiSearch, LPTSTR pszBase, LPTSTR pszEnding)
351 TCHAR szFileset[ cchNAME ];
352 lpiSearch->GetFilesetName (szFileset);
355 if ((pszDot = (LPTSTR)lstrrchr (szFileset, TEXT('.'))) != NULL)
357 if ( lstrcmpi (pszDot, cszENDING_CLONE) &&
358 lstrcmpi (pszDot, cszENDING_REPLICA) )
366 lstrcpy (pszBase, szFileset);
369 else // (pszDot != NULL)
371 lstrcpy (pszBase, szFileset);
372 lstrcpy (pszEnding, pszDot);
373 pszBase[ pszEnding - szFileset ] = TEXT('\0');