Article Figure 1 Listing 1 Listing 2 mar2006.tar

Listing 1 myconfigCDBI.pm

 1: package MyConfig::CDBI;
 2: use base 'Class::DBI';
 3: use Class::DBI::AbstractSearch;
 4: 
 5: package MyConfig::CDBI::Interface;
 6: use base 'MyConfig::CDBI';
 7: __PACKAGE__->columns(Primary => qw/interface device/);
 8: __PACKAGE__->columns(Others => qw/description/);
 9: __PACKAGE__->has_a(device => 'MyConfig::CDBI::Device');
10: 
11: package MyConfig::CDBI::Device;
12: use base 'MyConfig::CDBI';
13: __PACKAGE__->columns(Primary => qw/device/);
14: __PACKAGE__->columns
15:     (Others => qw/location contact serial hardware software class/);
16: __PACKAGE__->has_many(interfaces => 'MyConfig::CDBI::Interface' );
17: 
18: package MyConfig::CDBI::Address;
19: use base 'MyConfig::CDBI';
20: __PACKAGE__->columns(Primary => qw/ip interface device/);
21: __PACKAGE__->columns(Others => qw/cidr type/);
22: __PACKAGE__->has_a(device => 'MyConfig::CDBI::Device');
23: __PACKAGE__->has_a(cidr => 'MyConfig::CDBI::Subnet');
24: 
25: package MyConfig::CDBI::Subnet;
26: use base 'MyConfig::CDBI';
27: __PACKAGE__->columns(All => qw/cidr first last/);
28: __PACKAGE__->has_many(addresses => 'MyConfig::CDBI::Address');
29: 
30: package MyConfig::CDBI::Sighting;
31: use base 'MyConfig::CDBI';
32: __PACKAGE__->columns(Primary => qw/endpoint time device interface/);
33: __PACKAGE__->has_a(endpoint => 'MyConfig::CDBI::Endpoint');
34: __PACKAGE__->has_a(device => 'MyConfig::CDBI::Device');
35: 
36: package MyConfig::CDBI::Assignment;
37: use base 'MyConfig::CDBI';
38: __PACKAGE__->columns(Primary => qw/ip time/);
39: __PACKAGE__->columns(Other => qw/endpoint cidr/);
40: __PACKAGE__->has_a(endpoint => 'MyConfig::CDBI::Endpoint');
41: __PACKAGE__->has_a(cidr => 'MyConfig::CDBI::Subnet');
42: 
43: package MyConfig::CDBI::Endpoint;
44: use base 'MyConfig::CDBI';
45: __PACKAGE__->columns(Primary => qw/endpoint/);
46: __PACKAGE__->columns(Other => qw/os vendor time/);
47: __PACKAGE__->has_many(all_assignments => 'MyConfig::CDBI::Assignment');
48: __PACKAGE__->has_many(all_sightings => 'MyConfig::CDBI::Sighting');
49: 
50: 42;