1 /* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS net command 4 * FILE: base/applications/network/net/cmdStatistics.c 5 * PROGRAMMERS: Eric Kohl <eric.kohl@reactos.org> 6 */ 7 8 #include "net.h" 9 #include <rtltypes.h> 10 #include <rtlfuncs.h> 11 12 static 13 INT 14 DisplayServerStatistics(VOID) 15 { 16 PSERVER_INFO_100 ServerInfo = NULL; 17 PSTAT_SERVER_0 StatisticsInfo = NULL; 18 LARGE_INTEGER LargeValue; 19 FILETIME FileTime, LocalFileTime; 20 SYSTEMTIME SystemTime; 21 WORD wHour; 22 INT nPaddedLength = 35; 23 NET_API_STATUS Status; 24 25 Status = NetServerGetInfo(NULL, 100, (PBYTE*)&ServerInfo); 26 if (Status != NERR_Success) 27 goto done; 28 29 Status = NetStatisticsGet(NULL, 30 SERVICE_SERVER, 31 0, 32 0, 33 (LPBYTE*)&StatisticsInfo); 34 if (Status != NERR_Success) 35 goto done; 36 37 PrintMessageStringV(4624, ServerInfo->sv100_name); 38 ConPrintf(StdOut, L"\n\n"); 39 40 RtlSecondsSince1970ToTime(StatisticsInfo->sts0_start, 41 &LargeValue); 42 FileTime.dwLowDateTime = LargeValue.u.LowPart; 43 FileTime.dwHighDateTime = LargeValue.u.HighPart; 44 FileTimeToLocalFileTime(&FileTime, &LocalFileTime); 45 FileTimeToSystemTime(&LocalFileTime, &SystemTime); 46 47 wHour = SystemTime.wHour; 48 if (wHour == 0) 49 { 50 wHour = 12; 51 } 52 else if (wHour > 12) 53 { 54 wHour = wHour - 12; 55 } 56 57 PrintMessageString(4600); 58 ConPrintf(StdOut, L" %d/%d/%d %d:%02d %s\n\n\n", 59 SystemTime.wMonth, SystemTime.wDay, SystemTime.wYear, 60 wHour, SystemTime.wMinute, 61 (SystemTime.wHour >= 1 && SystemTime.wHour < 13) ? L"AM" : L"PM"); 62 63 PrintPaddedMessageString(4601, nPaddedLength); 64 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_sopens); 65 66 PrintPaddedMessageString(4602, nPaddedLength); 67 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_stimedout); 68 69 PrintPaddedMessageString(4603, nPaddedLength); 70 ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->sts0_serrorout); 71 72 LargeValue.u.LowPart = StatisticsInfo->sts0_bytessent_low; 73 LargeValue.u.HighPart = StatisticsInfo->sts0_bytessent_high; 74 PrintPaddedMessageString(4604, nPaddedLength); 75 ConPrintf(StdOut, L"%I64u\n", LargeValue.QuadPart / 1024); 76 77 LargeValue.u.LowPart = StatisticsInfo->sts0_bytesrcvd_low; 78 LargeValue.u.HighPart = StatisticsInfo->sts0_bytesrcvd_high; 79 PrintPaddedMessageString(4605, nPaddedLength); 80 ConPrintf(StdOut, L"%I64u\n", LargeValue.QuadPart / 1024); 81 82 PrintPaddedMessageString(4606, nPaddedLength); 83 ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->sts0_avresponse); 84 85 PrintPaddedMessageString(4610, nPaddedLength); 86 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_syserrors); 87 88 PrintPaddedMessageString(4612, nPaddedLength); 89 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_permerrors); 90 91 PrintPaddedMessageString(4611, nPaddedLength); 92 ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->sts0_pwerrors); 93 94 PrintPaddedMessageString(4608, nPaddedLength); 95 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_fopens); 96 97 PrintPaddedMessageString(4613, nPaddedLength); 98 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_devopens); 99 100 PrintPaddedMessageString(4609, nPaddedLength); 101 ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->sts0_jobsqueued); 102 103 PrintMessageString(4620); 104 ConPrintf(StdOut, L"\n"); 105 106 ConPrintf(StdOut, L" "); 107 PrintPaddedMessageString(4621, nPaddedLength - 2); 108 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_bigbufneed); 109 110 ConPrintf(StdOut, L" "); 111 PrintPaddedMessageString(4622, nPaddedLength - 2); 112 ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->sts0_reqbufneed); 113 114 done: 115 if (StatisticsInfo != NULL) 116 NetApiBufferFree(StatisticsInfo); 117 118 if (ServerInfo != NULL) 119 NetApiBufferFree(ServerInfo); 120 121 return 0; 122 } 123 124 125 static 126 INT 127 DisplayWorkstationStatistics(VOID) 128 { 129 PWKSTA_INFO_100 WorkstationInfo = NULL; 130 PSTAT_WORKSTATION_0 StatisticsInfo = NULL; 131 LARGE_INTEGER LargeValue; 132 FILETIME FileTime, LocalFileTime; 133 SYSTEMTIME SystemTime; 134 WORD wHour; 135 INT nPaddedLength = 47; 136 NET_API_STATUS Status; 137 138 Status = NetWkstaGetInfo(NULL, 139 100, 140 (PBYTE*)&WorkstationInfo); 141 if (Status != NERR_Success) 142 goto done; 143 144 Status = NetStatisticsGet(NULL, 145 SERVICE_SERVER, 146 0, 147 0, 148 (LPBYTE*)&StatisticsInfo); 149 if (Status != NERR_Success) 150 goto done; 151 152 PrintMessageStringV(4623, WorkstationInfo->wki100_computername); 153 ConPrintf(StdOut, L"\n\n"); 154 155 RtlSecondsSince1970ToTime(StatisticsInfo->StatisticsStartTime.u.LowPart, 156 &LargeValue); 157 FileTime.dwLowDateTime = LargeValue.u.LowPart; 158 FileTime.dwHighDateTime = LargeValue.u.HighPart; 159 FileTimeToLocalFileTime(&FileTime, &LocalFileTime); 160 FileTimeToSystemTime(&LocalFileTime, &SystemTime); 161 162 wHour = SystemTime.wHour; 163 if (wHour == 0) 164 { 165 wHour = 12; 166 } 167 else if (wHour > 12) 168 { 169 wHour = wHour - 12; 170 } 171 172 PrintMessageString(4600); 173 ConPrintf(StdOut, L" %d/%d/%d %d:%02d %s\n\n\n", 174 SystemTime.wMonth, SystemTime.wDay, SystemTime.wYear, 175 wHour, SystemTime.wMinute, 176 (SystemTime.wHour >= 1 && SystemTime.wHour < 13) ? L"AM" : L"PM"); 177 178 PrintPaddedMessageString(4630, nPaddedLength); 179 ConPrintf(StdOut, L"%I64u\n", StatisticsInfo->BytesReceived.QuadPart); 180 181 PrintPaddedMessageString(4631, nPaddedLength); 182 ConPrintf(StdOut, L"%I64u\n", StatisticsInfo->SmbsReceived.QuadPart); 183 184 PrintPaddedMessageString(4632, nPaddedLength); 185 ConPrintf(StdOut, L"%I64u\n", StatisticsInfo->BytesTransmitted.QuadPart); 186 187 PrintPaddedMessageString(4633, nPaddedLength); 188 ConPrintf(StdOut, L"%I64u\n", StatisticsInfo->SmbsTransmitted.QuadPart); 189 190 PrintPaddedMessageString(4634, nPaddedLength); 191 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->ReadOperations); 192 193 PrintPaddedMessageString(4635, nPaddedLength); 194 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->WriteOperations); 195 196 PrintPaddedMessageString(4636, nPaddedLength); 197 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->RawReadsDenied); 198 199 PrintPaddedMessageString(4637, nPaddedLength); 200 ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->RawWritesDenied); 201 202 PrintPaddedMessageString(4638, nPaddedLength); 203 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->NetworkErrors); 204 205 PrintPaddedMessageString(4639, nPaddedLength); 206 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->CoreConnects + 207 StatisticsInfo->Lanman20Connects + 208 StatisticsInfo->Lanman21Connects + 209 StatisticsInfo->LanmanNtConnects); 210 211 PrintPaddedMessageString(4640, nPaddedLength); 212 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->Reconnects); 213 214 PrintPaddedMessageString(4641, nPaddedLength); 215 ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->ServerDisconnects); 216 217 PrintPaddedMessageString(4642, nPaddedLength); 218 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->Sessions); 219 220 PrintPaddedMessageString(4643, nPaddedLength); 221 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->HungSessions); 222 223 PrintPaddedMessageString(4644, nPaddedLength); 224 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->FailedSessions); 225 226 PrintPaddedMessageString(4645, nPaddedLength); 227 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->InitiallyFailedOperations + 228 StatisticsInfo->FailedCompletionOperations); 229 230 PrintPaddedMessageString(4646, nPaddedLength); 231 ConPrintf(StdOut, L"%lu\n", StatisticsInfo->UseCount); 232 233 PrintPaddedMessageString(4647, nPaddedLength); 234 ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->FailedUseCount); 235 236 done: 237 if (StatisticsInfo != NULL) 238 NetApiBufferFree(StatisticsInfo); 239 240 if (WorkstationInfo != NULL) 241 NetApiBufferFree(WorkstationInfo); 242 243 return 0; 244 } 245 246 247 INT 248 cmdStatistics( 249 INT argc, 250 WCHAR **argv) 251 { 252 INT i, result = 0; 253 BOOL bServer = FALSE; 254 BOOL bWorkstation = FALSE; 255 256 for (i = 2; i < argc; i++) 257 { 258 if (_wcsicmp(argv[i], L"server") == 0) 259 { 260 if (bWorkstation == FALSE) 261 bServer = TRUE; 262 continue; 263 } 264 265 if (_wcsicmp(argv[i], L"workstation") == 0) 266 { 267 if (bServer == FALSE) 268 bWorkstation = TRUE; 269 continue; 270 } 271 272 if (_wcsicmp(argv[i], L"help") == 0) 273 { 274 /* Print short syntax help */ 275 PrintMessageString(4381); 276 ConPuts(StdOut, L"\n"); 277 PrintNetMessage(MSG_STATISTICS_SYNTAX); 278 return 0; 279 } 280 281 if (_wcsicmp(argv[i], L"/help") == 0) 282 { 283 /* Print full help text*/ 284 PrintMessageString(4381); 285 ConPuts(StdOut, L"\n"); 286 PrintNetMessage(MSG_STATISTICS_SYNTAX); 287 PrintNetMessage(MSG_STATISTICS_HELP); 288 return 0; 289 } 290 } 291 292 if (bServer) 293 { 294 result = DisplayServerStatistics(); 295 } 296 else if (bWorkstation) 297 { 298 result = DisplayWorkstationStatistics(); 299 } 300 else 301 { 302 PrintMessageString(4379); 303 ConPuts(StdOut, L"\n"); 304 ConPuts(StdOut, L" Server\n"); 305 ConPuts(StdOut, L" Workstation\n"); 306 ConPuts(StdOut, L"\n"); 307 } 308 309 if (result == 0) 310 PrintErrorMessage(ERROR_SUCCESS); 311 312 return result; 313 }