Eigene NAnt Plugins schreiben – Teil 2

Nachdem wir im ersten Teil ein kleines, rudimentäres Plugin geschrieben haben, welches einfach nur stumpf einen Text ausgibt, wollen wir jetzt ein Plugin bauen, das weiteren Text ausgibt (diesmal aber mit einem Parameter) 🙂

Ich habe mir gedacht, es wäre doch schön zu sehen wir viel Plattenplatz noch auf der Platte vorhanden ist, zu der Zeit in der gerade ein Build angestoßen wurde.
Hierfür habe ich mir folgendes Plugin geschrieben:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
using NAnt.Core;
using NAnt.Core.Attributes;
 
 
namespace tA.NAnt.SysInfo
{	
	#region Eigenschaften
	[TaskAttribute("HDD", Required = false)]
	public bool b_hdd{ get; set; }
	#endregion
 
	[TaskName("sysinfo")]
	public class SysInfo : Task
	{
		protected override void ExecuteTask()
		{
			Log(Level.Info,"--------------------------------------------------------------------");
			Log(Level.Info,"Mein Buildserver CC.NET (buildserver.domain.intern)");
			Log(Level.Info,"2009 by Sven Schmalle");
			Log(Level.Info,"Projekt: "+Project.ProjectName);
			Log(Level.Info,"Beschreibung: Dies ist ein Allgemeines Test-Projekt");
			Log(Level.Info,"--------------------------------------------------------------------");
			if (b_hdd)
			{
				Log(Level.Info, "HDD           : " + LogicalDisk("C:"));
			}
		}
 
 
 
		#region LogicalDisk
		public string LogicalDisk(string Laufwerk)
		{
			string diskSpace = string.Empty;
			object device, space;
			ManagementObjectSearcher objCS = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
			foreach (ManagementObject objMgmt in objCS.Get())
			{
				//MessageBox.Show(objMgmt["DeviceID"].ToString());
				if (objMgmt["DeviceID"].ToString() == Laufwerk)
				{
					device = objMgmt["DeviceID"];		// C:
					if (null != device)
					{
						space = objMgmt["FreeSpace"];	// C:10.32 GB, D:5.87GB
						if (null != space)
							diskSpace = device.ToString() +"\\ "+ FormatBytes(double.Parse(space.ToString())) + " / " + FormatBytes(double.Parse(objMgmt["Size"].ToString())) + " Frei...";
					}
				}
			}
 
			diskSpace = diskSpace.Substring(0, diskSpace.Length - 2);
			return diskSpace;
		}
 
		public string FormatBytes(double bytes)
		{
			int unit = 0;
			while (bytes > 1024)
			{
				bytes /= 1024;
				++unit;
			}
 
			return bytes.ToString("F") + " GB";
		}
		#endregion
	}
}

Sooo… Wir haben jetzt eine eigenscahft „b_HDD“, die wir über den Schalter „HDD“ in dem NAnt-Buildscript setzen können.
Das Buildscript sieht dementsprechend so aus:

1
2
3
4
5
6
<!-- ################################################################################
	Info:
-->
<target name="Info">
	<sysinfo  HDD="true" />
</target>

Und als ausgabe dessen bekommen wir dann:

Buildfile: file:///C:/Projekte/EStorm/nant.build
Target framework: Microsoft .NET Framework 2.0
Target(s) specified: Info

Info:
[sysinfo] --------------------------------------------------------------------
[sysinfo] Mein Buildserver CC.NET (buildserver.domain.intern)
[sysinfo] 2009 by Sven Schmalle
[sysinfo] Projekt: EStorm
[sysinfo] Beschreibung: Dies ist ein Allgemeines Test-Projekt
[sysinfo] --------------------------------------------------------------------
[sysinfo] HDD: C:\  61,87 GB / 79,99 GB Frei.

Na? zu viel versprochen? 🙂

leave your comment


*

Unterstütze den Frickelblog!