public MemoryInfoHelper fromByte(byte[] buf) { MemoryInfoHelper mi = this; int offset = 0; //jump behind marker offset = ByteHelper.meminfostatusBytes.Length; mi.memoryLoad = (UInt32)BitConverter.ToUInt32(buf, offset); offset += sizeof(System.UInt32); mi.totalPhysical = (UInt32)BitConverter.ToUInt32(buf, offset); offset += sizeof(System.UInt32); mi.availPhysical = (UInt32)BitConverter.ToUInt32(buf, offset); offset += sizeof(System.UInt32); mi.totalPageFile = (UInt32)BitConverter.ToUInt32(buf, offset); offset += sizeof(System.UInt32); mi.availPageFile = (UInt32)BitConverter.ToUInt32(buf, offset); offset += sizeof(System.UInt32); mi.totalVirtual = (UInt32)BitConverter.ToUInt32(buf, offset); offset += sizeof(System.UInt32); mi.availVirtual = (UInt32)BitConverter.ToUInt32(buf, offset); return(mi); }
/// <summary> /// build thread and process list periodically and fire update event and enqueue results for the socket thread /// </summary> void usageThread() { try { int interval = 3000; //rebuild a new mem usage info VMusage.CeGetProcVMusage vmInfo = new CeGetProcVMusage(); while (!bStopMainThread) { eventEnableCapture.WaitOne(); List <VMusage.procVMinfo> myList = vmInfo._procVMinfo; //get a list of processes and the VM usage StringBuilder sbLogInfo = new StringBuilder(); //needed to merge infos for log System.Threading.Thread.Sleep(interval); uint _totalMemUse = 0; long lTimeStamp = DateTime.Now.ToFileTimeUtc(); //send all data in one block List <byte> buffer = new List <byte>(); buffer.AddRange(ByteHelper.LargePacketBytes); foreach (VMusage.procVMinfo pvmi in myList) { pvmi.Time = lTimeStamp; buffer.AddRange(pvmi.toByte()); _totalMemUse += pvmi.memusage; if (!pvmi.name.StartsWith("Slot", StringComparison.InvariantCultureIgnoreCase)) { //_fileLogger.addLog(pvmi.ToString()); //adds one row for each VM info sbLogInfo.Append(pvmi.name + "\t" + pvmi.memusage.ToString() + "\t"); } } procStatsQueueBytes.Enqueue(buffer.ToArray()); /* * //enqueue item by item * foreach(VMusage.procVMinfo pvmi in myList){ * pvmi.Time = lTimeStamp; * procStatsQueueBytes.Enqueue(pvmi.toByte()); * _totalMemUse += pvmi.memusage; * } */ onUpdateHandler(new procVMinfoEventArgs(myList, _totalMemUse)); //send MemoryStatusInfo memorystatus.MemoryInfo.MEMORYSTATUS mstat = new memorystatus.MemoryInfo.MEMORYSTATUS(); if (memorystatus.MemoryInfo.GetMemoryStatus(ref mstat)) { MemoryInfoHelper memoryInfoStat = new MemoryInfoHelper(mstat); System.Diagnostics.Debug.WriteLine(memoryInfoStat.ToString()); //send header procStatsQueueBytes.Enqueue(ByteHelper.meminfostatusBytes); //send data procStatsQueueBytes.Enqueue(memoryInfoStat.toByte()); //log global memstatus sbLogInfo.Append( "total\t" + memoryInfoStat.totalPhysical.ToString() + "\tfree\t" + memoryInfoStat.availPhysical.ToString() + "\tvtotal\t" + memoryInfoStat.totalVirtual.ToString() + "tvfree\t" + memoryInfoStat.availVirtual.ToString() + "\tload\t" + memoryInfoStat.memoryLoad + "\t"); } //write a log line _fileLogger.addLog(sbLogInfo.ToString() + "\r\n"); procStatsQueueBytes.Enqueue(ByteHelper.endOfTransferBytes); ((AutoResetEvent)eventEnableSend).Set(); }//while true } catch (ThreadAbortException ex) { System.Diagnostics.Debug.WriteLine("ThreadAbortException: usageThread(): " + ex.Message); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Exception: usageThread(): " + ex.Message); } System.Diagnostics.Debug.WriteLine("Thread ENDED"); }
void MessageReceivedCallback(IAsyncResult result) { EndPoint remoteEndPoint = new IPEndPoint(0, 0); //IPEndPoint LocalIPEndPoint = new IPEndPoint(IPAddress.Any, 3001); //EndPoint LocalEndPoint = (EndPoint)LocalIPEndPoint; //IPEndPoint remoteEP = (IPEndPoint)LocalEndPoint; //System.Diagnostics.Debug.WriteLine("Remote IP: " + remoteEP.Address.ToString()); try { //all data should fit in one package! int bytesRead = receiveSocket.EndReceiveFrom(result, ref remoteEndPoint); //System.Diagnostics.Debug.WriteLine("Remote IP: " + ((IPEndPoint)(remoteEndPoint)).Address.ToString()); byte[] bData = new byte[bytesRead]; Array.Copy(recBuffer, bData, bytesRead); if (ByteHelper.isEndOfTransfer(bData)) { System.Diagnostics.Debug.WriteLine("isEndOfTransfer"); updateEndOfTransfer();// end of transfer } else if (ByteHelper.isMemInfoPacket(bData)) { System.Diagnostics.Debug.WriteLine("isMemInfoPacket"); try { VMusage.MemoryInfoHelper mstat = new VMusage.MemoryInfoHelper(); mstat.fromByte(bData); //System.Diagnostics.Debug.WriteLine(mstat.ToString()); updateMem(mstat); } catch (Exception) { } } else if (ByteHelper.isLargePacket(bData)) { System.Diagnostics.Debug.WriteLine("isLargePacket"); try { List <procVMinfo> lStats = new List <procVMinfo>(); VMusage.procVMinfo stats = new VMusage.procVMinfo(); lStats = stats.getprocVmList(bData, ((IPEndPoint)(remoteEndPoint)).Address.ToString()); updateStatusBulk(lStats); //foreach (procVMinfo pvmi in lStats) //{ // pvmi.remoteIP = ((IPEndPoint)(remoteEndPoint)).Address.ToString(); // //System.Diagnostics.Debug.WriteLine( stats.dumpStatistics() ); //} } catch (Exception) { } } else { System.Diagnostics.Debug.WriteLine("trying vmUsagePacket..."); try { VMusage.procVMinfo stats = new VMusage.procVMinfo(bData); stats.remoteIP = ((IPEndPoint)(remoteEndPoint)).Address.ToString(); //System.Diagnostics.Debug.WriteLine( stats.dumpStatistics() ); if (stats.Time == 0) { stats.Time = DateTime.Now.Ticks; } updateStatus(stats); } catch (Exception) { } } } catch (SocketException e) { System.Diagnostics.Debug.WriteLine(String.Format("MessageReceivedCallback SocketException: {0} {1}", e.ErrorCode, e.Message)); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(String.Format("MessageReceivedCallback Exception: {0}", e.Message)); } try { //ready to receive next packet receiveSocket.BeginReceiveFrom(recBuffer, 0, recBuffer.Length, SocketFlags.None, ref bindEndPoint, new AsyncCallback(MessageReceivedCallback), (object)this); } catch (Exception) { } }
private void updateMem(MemoryInfoHelper data) { //System.Diagnostics.Debug.WriteLine("updateStatus: " + data.dumpStatistics()); if (this.onUpdateMem != null) this.onUpdateMem(this, data); }
void MessageReceivedCallback(IAsyncResult result) { EndPoint remoteEndPoint = new IPEndPoint(0, 0); //IPEndPoint LocalIPEndPoint = new IPEndPoint(IPAddress.Any, 3001); //EndPoint LocalEndPoint = (EndPoint)LocalIPEndPoint; //IPEndPoint remoteEP = (IPEndPoint)LocalEndPoint; //System.Diagnostics.Debug.WriteLine("Remote IP: " + remoteEP.Address.ToString()); try { //all data should fit in one package! int bytesRead = receiveSocket.EndReceiveFrom(result, ref remoteEndPoint); //System.Diagnostics.Debug.WriteLine("Remote IP: " + ((IPEndPoint)(remoteEndPoint)).Address.ToString()); byte[] bData = new byte[bytesRead]; Array.Copy(recBuffer, bData, bytesRead); if (ByteHelper.isEndOfTransfer(bData)) { System.Diagnostics.Debug.WriteLine("isEndOfTransfer"); updateEndOfTransfer();// end of transfer } else if (ByteHelper.isMemInfoPacket(bData)) { System.Diagnostics.Debug.WriteLine("isMemInfoPacket"); try { VMusage.MemoryInfoHelper mstat = new VMusage.MemoryInfoHelper(); mstat.fromByte(bData); //System.Diagnostics.Debug.WriteLine(mstat.ToString()); updateMem(mstat); } catch (Exception) { } } else if(ByteHelper.isLargePacket(bData)){ System.Diagnostics.Debug.WriteLine("isLargePacket"); try { List<procVMinfo> lStats = new List<procVMinfo>(); VMusage.procVMinfo stats = new VMusage.procVMinfo(); lStats = stats.getprocVmList(bData, ((IPEndPoint)(remoteEndPoint)).Address.ToString()); updateStatusBulk(lStats); //foreach (procVMinfo pvmi in lStats) //{ // pvmi.remoteIP = ((IPEndPoint)(remoteEndPoint)).Address.ToString(); // //System.Diagnostics.Debug.WriteLine( stats.dumpStatistics() ); //} } catch (Exception) { } } else { System.Diagnostics.Debug.WriteLine("trying vmUsagePacket..."); try { VMusage.procVMinfo stats = new VMusage.procVMinfo(bData); stats.remoteIP = ((IPEndPoint)(remoteEndPoint)).Address.ToString(); //System.Diagnostics.Debug.WriteLine( stats.dumpStatistics() ); if (stats.Time == 0) stats.Time = DateTime.Now.Ticks; updateStatus(stats); } catch (Exception) { } } } catch (SocketException e) { System.Diagnostics.Debug.WriteLine(String.Format("MessageReceivedCallback SocketException: {0} {1}", e.ErrorCode, e.Message)); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(String.Format("MessageReceivedCallback Exception: {0}", e.Message)); } try { //ready to receive next packet receiveSocket.BeginReceiveFrom(recBuffer, 0, recBuffer.Length, SocketFlags.None, ref bindEndPoint, new AsyncCallback(MessageReceivedCallback), (object)this); } catch (Exception) { } }
/// <summary> /// build thread and process list periodically and fire update event and enqueue results for the socket thread /// </summary> void usageThread() { try { int interval = 3000; //rebuild a new mem usage info VMusage.CeGetProcVMusage vmInfo = new CeGetProcVMusage(); while (!bStopMainThread) { eventEnableCapture.WaitOne(); List<VMusage.procVMinfo> myList = vmInfo._procVMinfo; //get a list of processes and the VM usage StringBuilder sbLogInfo = new StringBuilder(); //needed to merge infos for log System.Threading.Thread.Sleep(interval); uint _totalMemUse = 0; long lTimeStamp = DateTime.Now.ToFileTimeUtc(); //send all data in one block List<byte> buffer = new List<byte>(); buffer.AddRange(ByteHelper.LargePacketBytes); foreach (VMusage.procVMinfo pvmi in myList) { pvmi.Time = lTimeStamp; buffer.AddRange(pvmi.toByte()); _totalMemUse += pvmi.memusage; if (!pvmi.name.StartsWith("Slot", StringComparison.InvariantCultureIgnoreCase)) { //_fileLogger.addLog(pvmi.ToString()); //adds one row for each VM info sbLogInfo.Append(pvmi.name + "\t" + pvmi.memusage.ToString() + "\t"); } } procStatsQueueBytes.Enqueue(buffer.ToArray()); /* //enqueue item by item foreach(VMusage.procVMinfo pvmi in myList){ pvmi.Time = lTimeStamp; procStatsQueueBytes.Enqueue(pvmi.toByte()); _totalMemUse += pvmi.memusage; } */ onUpdateHandler(new procVMinfoEventArgs(myList, _totalMemUse)); //send MemoryStatusInfo memorystatus.MemoryInfo.MEMORYSTATUS mstat = new memorystatus.MemoryInfo.MEMORYSTATUS(); if (memorystatus.MemoryInfo.GetMemoryStatus(ref mstat)) { MemoryInfoHelper memoryInfoStat= new MemoryInfoHelper(mstat); System.Diagnostics.Debug.WriteLine(memoryInfoStat.ToString()); //send header procStatsQueueBytes.Enqueue(ByteHelper.meminfostatusBytes); //send data procStatsQueueBytes.Enqueue(memoryInfoStat.toByte()); //log global memstatus sbLogInfo.Append( "total\t" + memoryInfoStat.totalPhysical.ToString() + "\tfree\t" + memoryInfoStat.availPhysical.ToString() + "\tvtotal\t" + memoryInfoStat.totalVirtual.ToString() + "tvfree\t" + memoryInfoStat.availVirtual.ToString() + "\tload\t" + memoryInfoStat.memoryLoad + "\t"); } //write a log line _fileLogger.addLog(sbLogInfo.ToString()+"\r\n"); procStatsQueueBytes.Enqueue(ByteHelper.endOfTransferBytes); ((AutoResetEvent)eventEnableSend).Set(); }//while true } catch (ThreadAbortException ex) { System.Diagnostics.Debug.WriteLine("ThreadAbortException: usageThread(): " + ex.Message); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Exception: usageThread(): " + ex.Message); } System.Diagnostics.Debug.WriteLine("Thread ENDED"); }