9 #include "svc_viewlog.h"
16 * PROTOTYPES _________________________________________________________________
20 void Problems_OnInitDialog (HWND hDlg, LPIDENT lpi);
21 void Problems_OnRefresh (HWND hDlg, LPIDENT lpi);
22 void Problems_OnRedraw (HWND hDlg, LPIDENT lpi);
23 void Problems_OnRemedy (HWND hDlg, LPIDENT lpi);
27 * ROUTINES ___________________________________________________________________
31 BOOL CALLBACK Problems_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
33 if (AfsAppLib_HandleHelp (IDD_SVR_PROBLEMS, hDlg, msg, wp, lp))
36 if (msg == WM_INITDIALOG)
37 SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
39 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
44 NotifyMe (WHEN_OBJECT_CHANGES, lpi, hDlg, 0);
45 Problems_OnInitDialog (hDlg, lpi);
46 Problems_OnRefresh (hDlg, lpi);
49 case WM_NOTIFY_FROM_DISPATCH:
50 Problems_OnRefresh (hDlg, lpi);
51 Delete ((LPNOTIFYSTRUCT)lp);
55 DontNotifyMeEver (hDlg);
61 case IDC_PROBLEM_REMEDY:
62 Problems_OnRemedy (hDlg, lpi);
67 case WM_CTLCOLORSTATIC:
68 if ((HWND)lp == GetDlgItem (hDlg, IDC_PROBLEM_TEXT))
70 SetBkColor ((HDC)wp, GetSysColor (COLOR_WINDOW));
71 return (BOOL)CreateSolidBrush (GetSysColor (COLOR_WINDOW));
78 posOld = GetScrollPos (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL);
107 memset (&si, 0x00, sizeof(si));
108 si.cbSize = sizeof(si);
109 si.fMask = SIF_RANGE;
110 GetScrollInfo (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL, &si);
111 posNew = limit (0, posNew, si.nMax);
113 if (posNew != posOld)
115 SetScrollPos (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL, posNew, (LOWORD(wp) == SB_THUMBTRACK) ? FALSE : TRUE);
116 Problems_OnRedraw (hDlg, lpi);
125 void Problems_OnInitDialog (HWND hDlg, LPIDENT lpi)
127 TCHAR szText[ cchRESOURCE ];
128 GetDlgItemText (hDlg, IDC_PROBLEM_TITLE, szText, cchRESOURCE);
130 LPTSTR pszTitle = NULL;
132 if (lpi->fIsServer())
134 TCHAR szServer[ cchNAME ];
135 lpi->GetServerName (szServer);
136 pszTitle = FormatString (szText, TEXT("%s"), szServer);
138 else if (lpi->fIsService())
140 TCHAR szServer[ cchNAME ];
141 TCHAR szService[ cchNAME ];
142 lpi->GetServerName (szServer);
143 lpi->GetServiceName (szService);
144 pszTitle = FormatString (szText, TEXT("%s%s"), szServer, szService);
146 else if (lpi->fIsAggregate())
148 TCHAR szServer[ cchNAME ];
149 TCHAR szAggregate[ cchNAME ];
150 lpi->GetServerName (szServer);
151 lpi->GetAggregateName (szAggregate);
152 pszTitle = FormatString (szText, TEXT("%s%s"), szServer, szAggregate);
154 else if (lpi->fIsFileset())
156 TCHAR szServer[ cchNAME ];
157 TCHAR szAggregate[ cchNAME ];
158 TCHAR szFileset[ cchNAME ];
159 lpi->GetServerName (szServer);
160 lpi->GetAggregateName (szAggregate);
161 lpi->GetFilesetName (szFileset);
162 pszTitle = FormatString (szText, TEXT("%s%s%s"), szServer, szAggregate, szFileset);
165 if (pszTitle == NULL)
166 SetDlgItemText (hDlg, IDC_PROBLEM_TITLE, TEXT(""));
169 SetDlgItemText (hDlg, IDC_PROBLEM_TITLE, pszTitle);
170 FreeString (pszTitle);
173 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SW_HIDE);
174 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), SW_HIDE);
175 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), SW_HIDE);
176 SetDlgItemText (hDlg, IDC_PROBLEM_TEXT, TEXT(""));
180 void Problems_OnRefresh (HWND hDlg, LPIDENT lpi)
182 size_t nAlerts = Alert_GetCount (lpi);
184 LPTSTR pszText = FormatString (IDS_PROBLEM_BOX, TEXT("%lu"), nAlerts);
185 SetDlgItemText (hDlg, IDC_PROBLEM_BOX, pszText);
186 FreeString (pszText);
191 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SW_HIDE);
192 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), SW_HIDE);
193 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), SW_HIDE);
195 TCHAR szText[ cchRESOURCE ];
196 if (lpi->fIsServer())
197 GetString (szText, IDS_SERVER_NO_PROBLEMS);
198 else if (lpi->fIsService())
199 GetString (szText, IDS_SERVICE_NO_PROBLEMS);
200 else if (lpi->fIsAggregate())
201 GetString (szText, IDS_AGGREGATE_NO_PROBLEMS);
202 else if (lpi->fIsFileset())
203 GetString (szText, IDS_FILESET_NO_PROBLEMS);
205 SetDlgItemText (hDlg, IDC_PROBLEM_TEXT, szText);
209 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SW_HIDE);
210 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), SW_HIDE);
211 Problems_OnRedraw (hDlg, lpi);
214 default: // two or more
215 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SW_SHOW);
216 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), SW_SHOW);
219 si.cbSize = sizeof(si);
220 si.fMask = SIF_RANGE | SIF_POS | SIF_PAGE;
227 SetScrollInfo (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL, &si, TRUE);
228 Problems_OnRedraw (hDlg, lpi);
234 void Problems_OnRedraw (HWND hDlg, LPIDENT lpi)
238 if (IsWindowVisible (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL)))
240 iAlert = GetScrollPos (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL);
243 TCHAR szText[ cchRESOURCE ];
244 wsprintf (szText, TEXT("%lu:"), 1+iAlert);
245 SetWindowText (GetDlgItem (hDlg, IDC_PROBLEM_HEADER), szText);
247 LPTSTR pszText1 = Alert_GetDescription (lpi, iAlert, TRUE);
248 LPTSTR pszText2 = Alert_GetRemedy (lpi, iAlert);
249 LPTSTR pszText3 = Alert_GetButton (lpi, iAlert);
251 LPTSTR pszProblem = FormatString (TEXT("%1\n\n%2"), TEXT("%s%s"),
252 (pszText1) ? pszText1 : TEXT(""),
253 (pszText2) ? pszText2 : TEXT(""));
254 SetWindowText (GetDlgItem (hDlg, IDC_PROBLEM_TEXT), pszProblem);
255 FreeString (pszProblem);
257 if (pszText3 == NULL)
258 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), SW_HIDE);
261 SetWindowText (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), pszText3);
262 ShowWindow (GetDlgItem (hDlg, IDC_PROBLEM_REMEDY), SW_SHOW);
265 FreeString (pszText3);
266 FreeString (pszText2);
267 FreeString (pszText1);
271 void Problems_OnRemedy (HWND hDlg, LPIDENT lpi)
273 int iAlert = GetScrollPos (GetDlgItem (hDlg, IDC_PROBLEM_SCROLL), SB_CTL);
275 LPIDENT lpiTarget = Alert_GetIdent (lpi, iAlert);
276 ALERT alert = Alert_GetAlert (lpi, iAlert);
281 if (lpiTarget && lpiTarget->fIsCell())
283 StartTask (taskREFRESH, NULL, lpiTarget);
287 StartTask (taskREFRESH, NULL, lpiTarget->GetServer());
292 if (lpiTarget && lpiTarget->fIsFileset())
294 size_t nAlerts = Alert_GetCount (lpiTarget);
295 Filesets_ShowProperties (lpiTarget, nAlerts, TRUE);
297 else if (lpiTarget && lpiTarget->fIsAggregate())
299 size_t nAlerts = Alert_GetCount (lpiTarget);
300 Aggregates_ShowProperties (lpiTarget, nAlerts, TRUE);
304 case alertNO_VLDBENT:
305 // No button in this case
309 // No button in this case
313 Services_ShowServiceLog (lpiTarget);
321 // No button in this case
324 case alertSTATE_NO_VNODE:
325 case alertSTATE_NO_SERVICE:
326 case alertSTATE_OFFLINE:
327 // No button in these cases
338 void ParseFilesetName (LPIDENT lpiSearch, LPTSTR pszBase, LPTSTR pszEnding)
340 TCHAR szFileset[ cchNAME ];
341 lpiSearch->GetFilesetName (szFileset);
344 if ((pszDot = (LPTSTR)lstrrchr (szFileset, TEXT('.'))) != NULL)
346 if ( lstrcmpi (pszDot, cszENDING_CLONE) &&
347 lstrcmpi (pszDot, cszENDING_REPLICA) )
355 lstrcpy (pszBase, szFileset);
358 else // (pszDot != NULL)
360 lstrcpy (pszBase, szFileset);
361 lstrcpy (pszEnding, pszDot);
362 pszBase[ pszEnding - szFileset ] = TEXT('\0');