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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
# requirements.pod: The pre-planning document
# Copyright (C) 2002 Stanislav Sinyagin
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# $Id: reqs.0.1.pod,v 1.1 2010-12-27 00:04:36 ivan Exp $
# Stanislav Sinyagin <ssinyagin@yahoo.com>
#
#
=head1 RRFW Requirements Version 0.1
Date: Jun 29 2003; Last revised: Aug 05 2003
In this article, I describe the important changes that are planned
for RRFW version 0.1.X.
=head1 Independent datasource trees
As noted by many users, RRFW lacks the scalability when the number of
network devices is more than 100. The XML compiler takes minutes to
process the configuration, and the Collector process initialization time
is too long.
Christian Schnidrig E<lt>christian.schnidrig@gmx.chE<gt> has proposed
a solution to split the database into several subsystems, each
being compiled separately, and with separate collector process.
In his concept, there is a "global" datasource tree, and
"subsystem" trees, each making a subset of global datasource nodes.
I propose to have a number of independent datasource trees, without
any superset. This would ease the administrator's work, and add more
security.
=head2 Changes in rrfw-siteconfig.pl
Instead of C<@RRFW::Global::xmlFiles>, the following hash will contain
the information about the trees:
%RRFW::Global::treeConfig = (
'tree_A' => {
'description' => 'The First Tree',
'xmlfiles' => ['a1.xml', 'a2.xml', 'a3.xml'],
'run' => { 'collector' => 1, 'monitor' => 1 } },
'tree_B' => {
'description' => 'The Second Tree',
'xmlfiles' => ['b1.xml', 'b2.xml'],
'run' => {} }
);
In this hash, the keys give the tree names, I<xmlfiles> points to an array
of source XML files, I<run> points to the names of the daemons that
would be automatically launched for the tree.
Two additional arrays: C<@RRFW::Global::xmlAlwaysIncludeFirst> and
C<@RRFW::Global::xmlAlwaysIncludeLast> will give a list of source XML
files that are included in every tree, in the beginning or in the end of
the XML files list.
=head2 ConfigTree object internals
There will be no such thing as globalInstance. All methods and procedures
that need to reference the current ConfigTree object will have it as
argument.
C<RRFW::ConfigTree::new()> will have a mandatory argument "TreeName".
=head2 Database structure
All datasource trees will share one BerkeleyDB environment. The
BDB environment home directory will stay the same, defined by I<dbhome>
config variable.
For each tree, the database files will be placed in a separate subdirectory
of a subdirectory of I<dbhome>.
=head2 User interface
All relevant command-line executables will support the following
options:
=over 4
=item * --tree <tree_name>
Specifies the datasource tree for processing;
=item * --all
If applicable, performs the operation on all available trees.
=back
When in verbose mode (B<--verbose>), the command-line programs must
print the tree names they operate with.
The web interface will take the PATH_INFO string as the tree name.
For mod_perl handler, it will be also possible to prohibit
PATH_INFO selection, and to configure the tree name in Apache
configuration.
When no PATH_INFO is given to the web interface handler,
a special superlevel menu may be shown with the list of available trees.
It will also be possible to specify tree-specific renderer attributes, like
C<%RRFW::Renderer::styling>, C<$RRFW::Renderer::companyName>, etc.
B<Plain CGI interface will not be supported> As Renderer gets more complex,
CGI initialization time will increase. Also it will become harder to support
two user interfaces with similar functionality.
=head2 Daemons launch master
There will be a master process that will launch collector and monitor
daemons for each tree. It will be configurable from a separate file,
specifying the daemons and execution parameters for each tree.
The master process will watch the child processes and issue warnings in the
events of child process termination.
Stopping the master process will stop all child daemons gracefully.
=head1 Separate database for non-datasource objects
In RRFW version 0.0.X, all the parameters for datasources, views,
monitors, and tokensets are stored in F<configuration.db> database.
As proposed by Christian Schnidrig, storing all non-datasource
objects information in a separate database would improve the scalability.
In RRFW version 0.1.X, datasource parameters will be stored in
F<ds_config.db>, and all other object's parameters in F<other_config.db>.
The XML compiler will have a new option, B<--nods>, which disables
processing of E<lt>datasourcesE<gt> elements in the input XML files.
In addition to C<ConfigurationReady> flag, there will be a flag that indicates
the readiness of datasource tree only.
All these measures will allow faster administration and testing of
non-datasource objects, and will prevent the collector from unneeded
interruptions.
=head1 User privileges
User privileges will apply to the tree level: across one datasource tree
a given user will have uniform privileges.
Each user belongs to one or more groups. Privileges are assigned to
groups only, not to individual users. Groups are one-level deep: they
consist of users only. Probably in the future groups will consist
of groups too.
In the beginning, only one privilege will be implemented: I<DisplayTree>.
The design should be flexible enough to add more privileges in the future.
Examples: I<GenerateReport>, I<Debug>, I<ScheduleTask>, and so on.
Privileges maintenance interface will include a command-line utility.
In the future, a web interface is also possible. In this case, a new
privilege will be added: I<EditPrivileges>.
Privileges editor will include the following functions:
=over 4
=item * add/delete group
=item * add/delete user
=item * change user password
=item * add/delete user membership in a group
=item * edit privileges for groups and trees
=item * list group members
=item * list groups a user belongs to
=item * list privileges for a given group or user
=item * list privileges and groups (or users) for a given tree
=item * export/import the privileges database to/from XML
=back
Privileges logics implementation must be separate from the database backend.
At first, BerkeleyDB backend will be supported. In the future, LDAP
backend is possible.
=head1 Author
Copyright (c) 2003 Stanislav Sinyagin ssinyagin@yahoo.com
|