Front page ui-lib-ification and re-design
authorJamie Cameron <jcameron@webmin.com>
Sun, 6 Jan 2008 02:02:33 +0000 (02:02 +0000)
committerJamie Cameron <jcameron@webmin.com>
Sun, 6 Jan 2008 02:02:33 +0000 (02:02 +0000)
lvm/CHANGELOG
lvm/config [new file with mode: 0644]
lvm/config.info [new file with mode: 0644]
lvm/index.cgi
lvm/lang/en
lvm/lvm-lib.pl

index 78e2c0c..f108c44 100644 (file)
@@ -6,3 +6,5 @@ Added support for LVM2, as used in the new 2.6 Linux kernel.
 When viewing a physical volume, the space used by each logical volume on it is displayed. Similarly, when viewing a logical volume, the amount of space contributed by each physical volume is displayed.
 ---- Changes since 1.290 ----
 Fixed display of space used on each physical volume by a logical volume for LVM version 2.
+---- Changes since 1.390 ----
+Re-designed the module's main page to use tabs, and added an option to show volumes and groups in tables (with more information) instead of using icons.
diff --git a/lvm/config b/lvm/config
new file mode 100644 (file)
index 0000000..926b876
--- /dev/null
@@ -0,0 +1 @@
+show_table=0
diff --git a/lvm/config.info b/lvm/config.info
new file mode 100644 (file)
index 0000000..7f53382
--- /dev/null
@@ -0,0 +1 @@
+show_table=Show volumes and groups as,1,1-Table,0-Icons
index 32b1603..86a895d 100755 (executable)
@@ -3,10 +3,11 @@
 # Display a table of all volumne groups and their physical and logical volumes.
 
 require './lvm-lib.pl';
+&ReadParse();
 
 if (!&has_command("vgdisplay")) {
        &lvm_header();
-       print "<p>",&text('index_ecommands', "<tt>vgdisplay</tt>"),"<p>\n";
+       print &text('index_ecommands', "<tt>vgdisplay</tt>"),"<p>\n";
        &ui_print_footer("/", $text{'index'});
        exit;
        }
@@ -18,7 +19,7 @@ if ($lvm_version && $lvm_version < 2) {
                }
        if (!-d $lvm_proc) {
                &lvm_header();
-               print "<p>",&text('index_emodule', "<tt>$lvm_proc</tt>",
+               print &text('index_emodule', "<tt>$lvm_proc</tt>",
                                  "<tt>lvm-mod</tt>"),"<p>\n";
                &ui_print_footer("/", $text{'index'});
                exit;
@@ -26,76 +27,184 @@ if ($lvm_version && $lvm_version < 2) {
        }
 if (!$lvm_version) {
        &lvm_header();
-       print "<p>",&text('index_eversion', "<tt>vgdisplay --version</tt>",
+       print &text('index_eversion', "<tt>vgdisplay --version</tt>",
                          "<pre>$out</pre>"),"<p>\n";
        &ui_print_footer("/", $text{'index'});
        exit;
        }
 &lvm_header();
 
-# Show table of volume groups
 @vgs = &list_volume_groups();
 if (@vgs) {
-       print "<table border width=100%>\n";
-       print "<tr $tb> <td><b>$text{'index_vgs'}</b></td> ",
-             "<td><b>$text{'index_pvs'}</b></td> ",
-             "<td><b>$text{'index_lvs'}</b></td> </tr>\n";
-       foreach $v (sort { $a->{'number'} <=> $b->{'number'} } @vgs) {
-               # Show volume group icon
-               print "<tr $cb> <td valign=top width=20%>\n";
-               &icons_table( [ "edit_vg.cgi?vg=".&urlize($v->{'name'}) ],
-                             [ &html_escape($v->{'name'}).
-                               "<br>".&nice_size($v->{'size'}*1024) ],
-                             [ "images/vg.gif" ], 1);
-               print &ui_links_row([
-                       "<a href='edit_vg.cgi'>$text{'index_add'}</a>" ]);
-               print "</td> <td valign=top width=40%>\n";
+       # Start tabs for volume groups, physical volumes and logical volumes
+       @tabs = ( [ 'vgs', $text{'index_vgs'}, 'index.cgi?mode=vgs' ],
+                 [ 'pvs', $text{'index_pvs'}, 'index.cgi?mode=pvs' ],
+                 [ 'lvs', $text{'index_lvs'}, 'index.cgi?mode=lvs' ] );
+       print &ui_tabs_start(\@tabs, "mode", $in{'mode'} || 'vgs', 1);
 
-               # Show physical volume icons
-               local @pvs = sort { $a->{'number'} <=> $b->{'number'} }
-                                 &list_physical_volumes($v->{'name'});
-               if (@pvs) {
-                       local (@icons, @titles, @links);
-                       @icons = map { "images/pv.gif" } @pvs;
-                       @titles = map { &html_escape($_->{'device'}).
-                                       "<br>".&nice_size($_->{'size'}*1024) } @pvs;
-                       @links = map { "edit_pv.cgi?vg=".&urlize($v->{'name'}).
-                                      "&pv=".&urlize($_->{'name'}) } @pvs;
-                       &icons_table(\@links, \@titles, \@icons, 3);
+       # Show volume groups
+       print &ui_tabs_start_tab("mode", "vgs");
+       print $text{'index_vgsdesc'},"<p>\n";
+       @vgs = sort { $a->{'number'} <=> $b->{'number'} } @vgs;
+       @links = ( "<a href='edit_vg.cgi'>$text{'index_add'}</a>" );
+       if ($config{'show_table'}) {
+               # As table
+               print &ui_links_row(\@links);
+               print &ui_columns_start([ $text{'index_vgname'},
+                                         $text{'index_vgsize'},
+                                         $text{'index_vgtotal'},
+                                         $text{'index_vgtotal2'} ], 100);
+               foreach $v (@vgs) {
+                       print &ui_columns_row([
+                         "<a href='edit_vg.cgi?vg=".
+                           &urlize($v->{'name'})."'>".
+                           &html_escape($v->{'name'})."</a>",
+                         &nice_size($v->{'size'}*1024),
+                         &text('lv_petotals', $v->{'pe_alloc'},
+                                              $v->{'pe_total'}),
+                         &text('lv_petotals',
+                           &nice_size($v->{'pe_alloc'}*$v->{'pe_size'}*1024),
+                           &nice_size($v->{'pe_total'}*$v->{'pe_size'}*1024))
+                         ]);
                        }
-               else {
-                       print "<b>$text{'index_nopvs'}</b><p>\n";
+               print &ui_columns_end();
+               }
+       else {
+               # As icons
+               print &ui_links_row(\@links);
+               foreach $v (@vgs) {
+                       push(@vgicons, "edit_vg.cgi?vg=".&urlize($v->{'name'}));
+                       push(@vgtitles, &html_escape($v->{'name'}).
+                                       "<br>".&nice_size($v->{'size'}*1024));
+                       push(@vglinks, "images/vg.gif");
                        }
-               print &ui_links_row([
-                       "<a href='edit_pv.cgi?vg=".&urlize($v->{'name'}).
-                         "'>$text{'index_addpv'}</a>" ]);
+               &icons_table(\@vgicons, \@vgtitles, \@vglinks);
+               }
+       print &ui_links_row(\@links);
+       print &ui_tabs_end_tab();
 
-               # Show logical volume icons
-               print "</td> <td valign=top width=40%>\n";
-               local @lvs = sort { $a->{'number'} <=> $b->{'number'} }
-                                 &list_logical_volumes($v->{'name'});
-               if (@lvs) {
-                       @icons = map { $_->{'is_snap'} ? "images/snap.gif"
-                                                      : "images/lv.gif" } @lvs;
-                       @titles = map { &html_escape($_->{'name'}).
-                                       "<br>".&nice_size($_->{'size'}*1024) } @lvs;
-                       @links = map { "edit_lv.cgi?vg=".&urlize($v->{'name'}).
-                                      "&lv=".&urlize($_->{'name'}) } @lvs;
-                       &icons_table(\@links, \@titles, \@icons, 3);
+       # Show physical volumes
+       print &ui_tabs_start_tab("mode", "pvs");
+       print $text{'index_pvsdesc'},"<p>\n";
+       foreach $v (@vgs) {
+               push(@allpvs, &list_physical_volumes($v->{'name'}));
+               }
+       @allpvs = sort { $a->{'name'} cmp $b->{'name'} } @allpvs;
+       @links = ( );
+       foreach $v (@vgs) {
+               push(@links, "<a href='edit_pv.cgi?vg=".&urlize($v->{'name'}).
+                            "'>".&text('index_addpv2', $v->{'name'})."</a>");
+               }
+       if (!@allpvs) {
+               # None yet
+               print "<b>$text{'index_nopvs2'}</b><p>\n";
+               }
+       elsif ($config{'show_table'}) {
+               # Show table of PVs
+               print &ui_links_row(\@links);
+               print &ui_columns_start([ $text{'index_pvname'},
+                                         $text{'index_pvvg'},
+                                         $text{'index_pvsize'},
+                                         $text{'index_pvtotal'},
+                                         $text{'index_pvtotal2'} ], 100);
+               foreach $p (@allpvs) {
+                       ($v) = grep { $_->{'name'} eq $p->{'vg'} } @vgs;
+                       print &ui_columns_row([
+                         "<a href='edit_pv.cgi?vg=".&urlize($v->{'name'}).
+                           "&pv=".&urlize($p->{'name'})."'>$p->{'name'}</a>",
+                         $v->{'name'},
+                         &nice_size($p->{'size'}*1024),
+                         &text('lv_petotals', $p->{'pe_alloc'},
+                                              $p->{'pe_total'}),
+                         &text('lv_petotals',
+                           &nice_size($p->{'pe_alloc'}*$p->{'pe_size'}*1024),
+                           &nice_size($p->{'pe_total'}*$p->{'pe_size'}*1024)),
+                         ]);
                        }
-               else {
-                       print "<b>$text{'index_nolvs'}</b><p>\n";
+               print &ui_columns_end();
+               }
+       else {
+               # Show PV icons
+               print &ui_links_row(\@links);
+               foreach $p (@allpvs) {
+                       ($v) = grep { $_->{'name'} eq $p->{'vg'} } @vgs;
+                       push(@pvicons, "edit_pv.cgi?vg=".&urlize($v->{'name'}).
+                                      "&pv=".&urlize($p->{'name'}));
+                       push(@pvtitles, &html_escape($p->{'name'}).
+                                       "<br>".&nice_size($p->{'size'}*1024));
+                       push(@pvlinks, "images/vg.gif");
                        }
-               print &ui_links_row([
-                       "<a href='edit_lv.cgi?vg=".&urlize($v->{'name'}).
-                         "'>$text{'index_addlv'}</a>",
-                       @lvs ? (
+               &icons_table(\@pvicons, \@pvtitles, \@pvlinks);
+               }
+       print &ui_links_row(\@links);
+       print &ui_tabs_end_tab();
+
+       # Show logical volumes
+       print &ui_tabs_start_tab("mode", "lvs");
+       print $text{'index_lvsdesc'},"<p>\n";
+       foreach $v (@vgs) {
+               push(@alllvs, &list_logical_volumes($v->{'name'}));
+               }
+       @alllvs = sort { $a->{'name'} cmp $b->{'name'} } @alllvs;
+       @links = ( );
+       foreach $v (@vgs) {
+               push(@links, "<a href='edit_lv.cgi?vg=".&urlize($v->{'name'}).
+                            "'>".&text('index_addlv2', $v->{'name'})."</a>");
+               push(@links, "<a href='edit_lv.cgi?vg=".&urlize($v->{'name'}).
+                    "&snap=1'>".&text('index_addlv2s', $v->{'name'})."</a>");
+               }
+       if (!@alllvs) {
+               # None yet
+               print "<b>$text{'index_nolvs2'}</b><p>\n";
+               }
+       elsif ($config{'show_table'}) {
+               # Show table of LVs
+               print &ui_links_row(\@links);
+               print &ui_columns_start([ $text{'index_lvname'},
+                                         $text{'index_lvvg'},
+                                         $text{'index_lvsize'},
+                                         $text{'index_lvuse'} ], 100);
+               foreach $l (@alllvs) {
+                       ($v) = grep { $_->{'name'} eq $l->{'vg'} } @vgs;
+                       if ($lv->{'is_snap'}) {
+                               ($snapof) = grep {
+                                       $_->{'size'} == $l->{'size'} &&
+                                       $_->{'vg'} eq $l->{'vg'} &&
+                                       $_->{'has_snap'} } @alllvs;
+                               }
+                       else {
+                               $snapof = undef;
+                               }
+                       @stat = &device_status($l->{'device'});
+                       print &ui_columns_row([
                          "<a href='edit_lv.cgi?vg=".&urlize($v->{'name'}).
-                           "&snap=1'>$text{'index_addsnap'}</a>" ) : ( )
-                       ]);
-               print "</td> </tr>\n";
+                           "&lv=".&urlize($l->{'name'})."'>$l->{'name'}</a>",
+                         $v->{'name'},
+                         &nice_size($l->{'size'}*1024),
+                         (@stat ? &device_message(@stat) : undef).
+                         ($snap ? " ".&text('index_snapof', $snap->{'name'})
+                                : ""),
+                         ]);
+                       }
+               print &ui_columns_end();
                }
-       print "</table><p>\n";
+       else {
+               # Show PV icons
+               print &ui_links_row(\@links);
+               foreach $l (@alllvs) {
+                       ($v) = grep { $_->{'name'} eq $l->{'vg'} } @vgs;
+                       push(@lvicons, "edit_lv.cgi?vg=".&urlize($v->{'name'}).
+                                      "&lv=".&urlize($l->{'name'}));
+                       push(@lvtitles, &html_escape($l->{'name'}).
+                                       "<br>".&nice_size($l->{'size'}*1024));
+                       push(@lvlinks, "images/lv.gif");
+                       }
+               &icons_table(\@lvicons, \@lvtitles, \@lvlinks);
+               }
+       print &ui_links_row(\@links);
+       print &ui_tabs_end_tab();
+
+       print &ui_tabs_end(1);
        }
 else {
        print "<b>$text{'index_none'}</b> <p>\n";
@@ -112,7 +221,7 @@ else {
 
 sub lvm_header
 {
-&ui_print_header(undef, $text{'index_title'}, "", undef, 0, 1, 0,
+&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1, 0,
        &help_search_link("lvm", "man", "doc", "google"), undef, undef,
        $lvm_version ? &text('index_version', $lvm_version) : undef);
 }
index 5a5e11b..cf2d38e 100644 (file)
@@ -8,13 +8,35 @@ index_none=No volume groups were found on your system.
 index_add=Add a new volume group.
 index_nolvs=This volume group has<br>no logical volumes yet.
 index_nopvs=This volume group has<br>no physical volumes yet.
-index_addpv=Add a physical volume to the group.
+i2ndex_addpv=Add a physical volume to the group.
+index_addpv2=Add a physical volume to <tt>$1</tt>.
+index_addlv2=Create a logical volume in <tt>$1</tt>.
+index_addlv2s=Create a snapshot in <tt>$1</tt>.
 index_addlv=Create a new logical volume.
 index_addsnap=Create a new snapshot.
 index_return=volume groups
 index_init=This may be because LVM has not been activated yet. <a href='$1'>Activate it now</a> to view all volume groups.
 index_eversion=Webmin only supports LVM versions 1.0 and above. The output from $1 on your system was : $2
 index_version=LVM version $1
+index_vgname=Volume group name
+index_vgsize=Total size
+index_vgtotal=Blocks used
+index_vgtotal2=Size used
+index_nopvs2=No physical volumes have been added to any volume groups yet.
+index_nolvs2=No logical volumes have been created from any volume groups yet.
+index_pvname=Physical volume device
+index_pvvg=In volume group
+index_pvsize=Device size
+index_pvtotal=Blocks used
+index_pvtotal2=Size used
+index_vgsdesc=A volume group is a set of disks that can be allocated to one or more logical volumes. Most systems will have only one.
+index_pvsdesc=A physical volume is a disk partition or RAID device that is part of a volume group. Its disk space can then be used by one or more logical volumes.
+index_lvsdesc=A logical volume is a virtual partition created from the combined disk space of a volume group. Each can have a filesystem which is then mounted to store files.
+index_lvname=Logical volume
+index_lvvg=Volume group
+index_lvsize=Size
+index_lvuse=Used for
+index_snapof=(Snapshot of $1)
 
 lv_edit=Edit Logical Volume
 lv_edit_snap=Edit Snapshot
index 819b560..debae61 100644 (file)
@@ -42,6 +42,7 @@ if (-d $lvm_proc) {
 else {
        # Use pvdisplay command
        local $pv;
+       local $_;
        open(DISPLAY, "pvdisplay |");
        while(<DISPLAY>) {
                s/\r|\n//g;
@@ -258,6 +259,7 @@ if (-d $lvm_proc) {
 else {
        # Use the lvdisplay command
        local $lv;
+       local $_;
        open(DISPLAY, "lvdisplay |");
        while(<DISPLAY>) {
                s/\r|\n//g;