+my $clusters = YAML::LoadFile("src/${source}");
+my @servers;
+
+# Initialise cluster details
+while (my($name,$cluster) = each %$clusters)
+{
+ if ($cluster->{servers})
+ {
+ $cluster->{bandwidth} = 0;
+
+ foreach my $server (@{$cluster->{servers}})
+ {
+ $server->{cluster} = $cluster;
+ $cluster->{bandwidth} = $cluster->{bandwidth} + $server->{bandwidth};
+
+ push @servers, $server;
+ }
+ }
+ else
+ {
+ my $server = {
+ cluster => $cluster,
+ pingdom => $cluster->{pingdom},
+ bandwidth => $cluster->{bandwidth},
+ ipv4 => $cluster->{ipv4},
+ ipv6 => $cluster->{ipv6}
+ };
+
+ $cluster->{servers} = [ $server ];
+
+ push @servers, $server;
+ }
+
+ $cluster->{name} = $name;
+
+ if ($ENV{PINGDOM_USERNAME} && $ENV{PINGDOM_PASSWORD})
+ {
+ $cluster->{status} = "down";
+ }
+ else
+ {
+ $cluster->{status} = "up";
+ }
+}
+
+# Initialise server details
+foreach my $server (@servers)
+{
+ if ($ENV{PINGDOM_USERNAME} && $ENV{PINGDOM_PASSWORD})
+ {
+ $server->{status} = "down";
+ }
+ else
+ {
+ $server->{status} = "up";
+ }
+}
+
+# If pingdom support is enabled then check which servers are up
+if ($ENV{PINGDOM_USERNAME} && $ENV{PINGDOM_PASSWORD})
+{
+ my $ua = LWP::UserAgent->new;
+
+ $ua->default_header("App-Key", "2cohi62u5haxvqmypk3ljqqrze1jufrh");
+ $ua->credentials("api.pingdom.com:443", "Pingdom API", $ENV{PINGDOM_USERNAME}, $ENV{PINGDOM_PASSWORD});
+
+ foreach my $server (@servers)
+ {
+ if (my $checkid = $server->{pingdom})
+ {
+ my $response = $ua->get("https://api.pingdom.com/api/2.0/checks/${checkid}");
+
+ if ($response->is_success)
+ {
+ my $check = decode_json($response->content);
+
+ $server->{status} = $check->{check}->{status};
+
+ if ($server->{status} eq "up")
+ {
+ $server->{cluster}->{status} = "up";
+ }
+ else
+ {
+ $server->{cluster}->{bandwidth} = $server->{cluster}->{bandwidth} - $server->{bandwidth};
+ }
+ }
+ }
+ }
+}
+
+# Initialise cluster details
+while (my($name,$cluster) = each %$clusters)
+{
+ $cluster->{bandwidth_limit} = $cluster->{bandwidth} * 1024 * 1024;
+ $cluster->{bandwidth_used} = 0;
+}