Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7597[/thread]

Konfigurationsdatei



<< >> 7 Einträge, 1 Seite
bloonix
 2006-01-08 20:49
#61561 #61561
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo,

irgendwie steh ich auf 'nem Schlauch und vielleicht kann man mir weiter-
helfen.

Ich habe für jedes Objekt eine eigene Konfigurationsdatei. Nun komme ich
einfach nicht weiter, was das Auslesen der Datei betrifft und auch die Art,
wie die Parameter darin abgelegt sind.

Derzeit ist es so, dass die Konfig-Dateien mittels Data::Dumper erzeugt
werden und mit reval (CPAN Safe) eingelesen werden. Was mich an dieser
Art stört ist das der Taint-Modus wohl überhaupt nicht damit zurecht
kommt. Hinzu kommt, dass dieser Konfigstil wohl nicht üblich ist - glaube
ich zumindest.

Das Problem bei der Sache ist, dass nicht alle Daten einfach mit
Name = Wert abgelegt werden. Sondern sich schon tiefere Strukturen
bilden.

Hier ein Ausschnitt einer Konfigurationsdatei, erzeugt mit Data::Dumper.

Code: (dl )
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
$host = {
         'Description' => 'Irgendeine Beschreibung',
         'MailCounter' => 3,
         'History' => 14,
         'Hostname' => 'suselinux',
         'Interval' => 10,
         'DataVolume' => 200,
         'Address' => '192.168.0.3',
         'CommKey' => '8f23hq8ofhoiajsv80hj0wg23049hg0',
         'MailTimer' => 1800,
         'Service' => 43610,
         'Monitor' => 'on',
         'Threshold' => {
                          'DiskStatsSum' => {
                                              'Bytes' => {
                                                                  'Limit' => 1,
                                                                  'MailGroup' => 'dba'
                                                                }
                                            },
                          'DiskUsage' => {
                                           '/dev/hda3' => {
                                                            'UsagePro' => {
                                                                                  'Limit' => 1,
                                                                                  'MailGroup' => 'dba'
                                                                                }
                                                          },
                                           '/dev/hda4' => {
                                                            'Usage' => {
                                                                               'Limit' => 1,
                                                                               'MailGroup' => 'dba'
                                                                             }
                                                          }
                                         },
                          'ProcStats' => {
                                           'Total' => {
                                                            'Limit' => 1,
                                                            'MailGroup' => 'dba'
                                                          },
                                           'New' => {
                                                          'Limit' => 200,
                                                          'MailGroup' => 'none'
                                                        }
                                         },
                          'NetStats' => {
                                          'TxBytes' => {
                                                            'Limit' => 200,
                                                            'MailGroup' => 'dba'
                                                          }
                                        }
                        },
       };


Wenn ich jetzt eine "normale" Konfigurationsdatei nutzen möchte, wie
könnte ich die Datei am besten unterteilen/aufbauen? Mein erster Gedanke
war folgendes ...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
History;14
MailCounter;3
Interval;10
Hostname;suselinux
DataVolume;200
Address;192.168.0.3
MailTimer;1800
CommKey;8f23hq8ofhoiajsv80hj0wg23049hg0
Service;43610
Monitor;on
Description;Irgendeine Beschreibung
DiskUsage;/dev/hda4;Usage;1;dba
DiskUsage;/dev/hda3;UsagePro;1;dba
Threshold;DiskStatsSum;Bytes;1;dba
Threshold;ProcStats;New;200;none
Threshold;ProcStats;Total;1;dba
Threshold;NetStats;TxBytes;200;dba


Mein zweiter sowas hier ...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[Global]
History = 14
MailCounter = 3
Interval = 10
Hostname = suselinux
DataVolume = 200
Address = 192.168.0.3
MailTimer = 1800
CommKey = 8f23hq8ofhoiajsv80hj0wg23049hg0
Service = 43610
Monitor = on
Description = Irgendeine Beschreibung

[DiskUsage]
/dev/hda4 = Usage;1;dba
/dev/hda3 = UsagePro;1;dba

[Thresholds]
DiskStatsSum = Bytes;1;dba
ProcStats = New;200;none
ProcStats = Total;1;dba
NetStats = TxBytes;200;dba


Gibt es nicht irgendwelche üblichen Methoden, auf die ich zurückgreifen
könnte? Config::IniFiles könnte mir die Parameter auslesen, aber auch
richtige Hashstrukturen bilden?

Greez,
opi\n\n

<!--EDIT|opi|1136746228-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
ptk
 2006-01-08 21:20
#61562 #61562
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Normale Konfigurationsdateien haben normalerweise nur flache Strukturen (ini-Format, die meisten Unix-Konfigformate). Manchmal hat man die Möglichkeit, Sachen zu strukturieren (httpd.conf von Apache). Deshalb wurde YAML entwickelt: ein Dateiformat, dass als Serialisierungsformat zwischen verschiedenen Sprachen und als Dateiformat für komplexe Konfigurationen gedacht ist. Die Perl-Implementation CPAN:YAML hat leider ernste Bugs, aber Besserung ist in Sicht: neue Versionen von YAML.pm sind im CPAN erhältlich, sowie ein alternativer Parser CPAN:YAML::Syck. Leider ist YAML mittlerweile eine recht komplexe Sprache geworden, auch nicht gerade ein Pluspunkt für Konfigurationen. Ein weiterer Ansatz könnte CPAN:JSON sein. Das ist deutlich einfacher als YAML, sieht aber immer wie eine Javascript-Struktur aus, während YAML schon wie eine Konfigurationsdatei aussehen kann.
bloonix
 2006-01-08 21:24
#61563 #61563
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo ptk,

meinst du, ich sollte dann bei Dumper+reval bleiben oder vielleicht mein
eigenes Ding schreiben?

Wenn eher D+r, wie kann ich dann vorgehen, damit -t nicht meckert?

Gruß,
opi
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
ptk
 2006-01-08 21:59
#61564 #61564
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Trotz der Unzulänglichkeiten benutze ich oft YAML.

Hast du ein "untaint" auf die Daten gemacht, bevor reval aufgerufen wurde? Zum Vergleich: würde ein eval funktionieren?
nepos
 2006-01-09 00:12
#61565 #61565
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
CPAN:Config::General waere auch noch ne Moeglichkeit, damit sollten glaube ich auch verschachtelte Strukturen gehen. Das ganze ist von der Syntax her so aehnlich wie die Apache-Konfigurationsdateien.
renee
 2006-01-09 00:12
#61566 #61566
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei den Perlmonks gab es letzt einen Artikel - wenn ich mich richtig erinnere -, der über Taint und Dumper ging. Ich suche mal...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2006-01-09 00:37
#61567 #61567
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Also es war ein Artikel mit "eval": http://perlmonks.org/?node_id=519695
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 7 Einträge, 1 Seite



View all threads created 2006-01-08 20:49.