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 SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
48 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_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 (BOOL)CreateSolidBrush (GetSysColor (COLOR_WINDOW));
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 SetDlgItemText (hDlg, IDC_PROBLEM_TEXT, szText);
218 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SW_HIDE);
219 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), SW_HIDE);
220 Problems_OnRedraw (hDlg, lpi);
223 default: // two or more
224 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SW_SHOW);
225 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), SW_SHOW);
228 si.cbSize = sizeof(si);
229 si.fMask = SIF_RANGE | SIF_POS | SIF_PAGE;
236 SetScrollInfo (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL, &si, TRUE);
237 Problems_OnRedraw (hDlg, lpi);
243 void Problems_OnRedraw (HWND hDlg, LPIDENT lpi)
247 if (IsWindowVisible (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL)))
249 iAlert = GetScrollPos (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL);
252 TCHAR szText[ cchRESOURCE ];
253 wsprintf (szText, TEXT("%lu:"), 1+iAlert);
254 SetWindowText (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), szText);
256 LPTSTR pszText1 = Alert_GetDescription (lpi, iAlert, TRUE);
257 LPTSTR pszText2 = Alert_GetRemedy (lpi, iAlert);
258 LPTSTR pszText3 = Alert_GetButton (lpi, iAlert);
260 LPTSTR pszProblem = FormatString (TEXT("%1\n\n%2"), TEXT("%s%s"),
261 (pszText1) ? pszText1 : TEXT(""),
262 (pszText2) ? pszText2 : TEXT(""));
263 SetWindowText (GetDlgItem (hDlg, IDC_PROBLEM_TEXT), pszProblem);
264 FreeString (pszProblem);
266 if (pszText3 == NULL)
267 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), SW_HIDE);
270 SetWindowText (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), pszText3);
271 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), SW_SHOW);
274 FreeString (pszText3);
275 FreeString (pszText2);
276 FreeString (pszText1);
280 void Problems_OnRemedy (HWND hDlg, LPIDENT lpi)
282 int iAlert = GetScrollPos (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL);
284 LPIDENT lpiTarget = Alert_GetIdent (lpi, iAlert);
285 ALERT alert = Alert_GetAlert (lpi, iAlert);
290 if (lpiTarget && lpiTarget->fIsCell())
292 StartTask (taskREFRESH, NULL, lpiTarget);
296 StartTask (taskREFRESH, NULL, lpiTarget->GetServer());
301 if (lpiTarget && lpiTarget->fIsFileset())
303 size_t nAlerts = Alert_GetCount (lpiTarget);
304 Filesets_ShowProperties (lpiTarget, nAlerts, TRUE);
306 else if (lpiTarget && lpiTarget->fIsAggregate())
308 size_t nAlerts = Alert_GetCount (lpiTarget);
309 Aggregates_ShowProperties (lpiTarget, nAlerts, TRUE);
313 case alertNO_VLDBENT:
314 // No button in this case
318 // No button in this case
322 Services_ShowServiceLog (lpiTarget);
330 // No button in this case
333 case alertSTATE_NO_VNODE:
334 case alertSTATE_NO_SERVICE:
335 case alertSTATE_OFFLINE:
336 // No button in these cases
347 void ParseFilesetName (LPIDENT lpiSearch, LPTSTR pszBase, LPTSTR pszEnding)
349 TCHAR szFileset[ cchNAME ];
350 lpiSearch->GetFilesetName (szFileset);
353 if ((pszDot = (LPTSTR)lstrrchr (szFileset, TEXT('.'))) != NULL)
355 if ( lstrcmpi (pszDot, cszENDING_CLONE) &&
356 lstrcmpi (pszDot, cszENDING_REPLICA) )
364 lstrcpy (pszBase, szFileset);
367 else // (pszDot != NULL)
369 lstrcpy (pszBase, szFileset);
370 lstrcpy (pszEnding, pszDot);
371 pszBase[ pszEnding - szFileset ] = TEXT('\0');