Changeset: 2a0a5ab57c22 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2a0a5ab57c22
Added Files:
        clients/iotclient/src/Utilities/customthreading.py
Modified Files:
        clients/iotclient/documentation/index.rst
        clients/iotclient/documentation/introduction.rst
        clients/iotclient/documentation/iot_server_arguments.rst
        clients/iotclient/documentation/restful_resources.rst
        clients/iotclient/documentation/streams_data_types.rst
        clients/iotclient/requirements.txt
        clients/iotclient/src/Flask/restresources.py
        clients/iotclient/src/Settings/filesystem.py
        clients/iotclient/src/Settings/iotlogger.py
        clients/iotclient/src/Settings/mapiconnection.py
        clients/iotclient/src/Streams/datatypes.py
        clients/iotclient/src/Streams/flushing.py
        clients/iotclient/src/Streams/streams.py
        clients/iotclient/src/main.py
Branch: iot
Log Message:

Small corrections on code and documentation


diffs (truncated from 583 to 300 lines):

diff --git a/clients/iotclient/documentation/index.rst 
b/clients/iotclient/documentation/index.rst
--- a/clients/iotclient/documentation/index.rst
+++ b/clients/iotclient/documentation/index.rst
@@ -18,4 +18,3 @@ Contents:
    restful_resources.rst
    streams_data_types.rst
    conclusion.rst
-
diff --git a/clients/iotclient/documentation/introduction.rst 
b/clients/iotclient/documentation/introduction.rst
--- a/clients/iotclient/documentation/introduction.rst
+++ b/clients/iotclient/documentation/introduction.rst
@@ -1,14 +1,13 @@
 .. _instroduction:
 
-
 ************
 Introduction
 ************
 
-This appplication is a Python web server destinated to extend MonetDB RDBMS to 
the Internet-of-Things while using a streaming engine. This project is derived 
from Pedro Ferreira master thesis, a junior researcher at CWI. The objective of 
the master thesis to re-evaluate the DataCell extension of MonetDB to the IOT 
world, which was postponed for several years since its release. To accomplish 
this, an IOT topology around MonetDB is being built, where this server aims to 
analyse the input of streams. Later it will also be included another web server 
to analyze the output of streams.
+This application is a Python web server destined to extend MonetDB RDBMS to 
the Internet-of-Things while using a streaming engine. This project is derived 
from Pedro Ferreira master thesis, a junior researcher at CWI. The objective of 
the master thesis to re-evaluate the DataCell extension of MonetDB to the IOT 
world, which was postponed for several years since its release. To accomplish 
this, an IOT topology around MonetDB is being built, where this server aims to 
analyse the input of streams. Later it will also be included another web server 
to analyze the output of streams.
 
 This web server is built using Python programming language, version 2.7, using 
`Flask-RESTful <https://pypi.python.org/pypi/Flask-RESTful>`_ framework. The 
required packages on requirements.txt should be installed before running the 
server. 
 
-The web server is capable of creating and deleting streams for the renewed 
DataCell extension. After a stream is created, it's possible to make batch 
inserts on it. The requests are made using RESTfull requests with JSON content. 
Both stream creation and stream insertion are validated using `JSON Schema 
Draft 4 <http://json-schema.org/documentation.html>`_. On a batch insert if a 
tuple is invalid, then no tuples are inserted. The stream engine adds an 
implicit timestamp column to recognize when the tuple was inserted. The 
inserted tuples are later evaluated using MonetDB's relational engine with 
continuous queries.
+The web server is capable of creating and deleting streams for the renewed 
DataCell extension. After a stream is created, it's possible to make batch 
inserts on it. The requests are made using RESTful requests with JSON content. 
Both stream creation and stream insertion are validated using `JSON Schema 
Draft 4 <http://json-schema.org/documentation.html>`_. On a batch insert if a 
tuple is invalid, then no tuples are inserted. The stream engine adds an 
implicit timestamp column to recognize when the tuple was inserted. The 
inserted tuples are later evaluated using MonetDB's relational engine with 
continuous queries.
 
 The following chapters explain the server parameters, RESTful resources and 
how to manage the streams.
diff --git a/clients/iotclient/documentation/iot_server_arguments.rst 
b/clients/iotclient/documentation/iot_server_arguments.rst
--- a/clients/iotclient/documentation/iot_server_arguments.rst
+++ b/clients/iotclient/documentation/iot_server_arguments.rst
@@ -1,11 +1,12 @@
 .. _starting_webserver:
 
-
 ***********************
 Starting the web server
 ***********************
 
-The server is started as a regular Python program invoking the :code:`main.py` 
file, however ther are several arguments that can be passed to change its 
behaviour.
+The packages listened on requirements.txt must be installed before running the 
server. To avoid conflicts with other versions of the packages existing on the 
host machine, is recommended to create a Python virtual environment for the 
server. `About Python virtual environments 
<http://docs.python-guide.org/en/latest/dev/virtualenvs/>`_.
+
+The server starts as a regular Python program invoking the :code:`main.py` 
file, however there are several arguments that can be passed to change its 
behaviour.
 
 ::
 
@@ -27,29 +28,27 @@ Paths
 
 Set the filesystem directory where the baskets will be created. By default in 
UNIX systems is on :code:`/etc/iotcollector` directory, while on Windows is on 
the directory where the :code:`main.py` script was invoked. While running the 
web server creates a :code:`baskets` directory.
 
-**-l  - -logfile=**
+**-l  - -log=**
 
 Location of logfile. On the logfile is reported when streams are created or 
removed, when tuples are inserted and when the baskets are flushed. By default 
in UNIX systems is :code:`/var/log/iot/iot.log`, while on Windows is the 
:code:`iot.log` on the directory where the :code:`main.py` script was invoked.
 
-**-c  - -configfile=**
+**-c  - -config=**
 
-Path of JSON file where the information of existing streams on the server will 
be stored. By default is the :code:`config.json` file on filesystem directory.
-
+Location of the JSON file where the information of existing streams on the 
server will be stored. By default is the :code:`config.json` file on filesystem 
directory.
 
 Host Identifier
 ---------------
 
 If the *useidentifier* parameter is provided, an extra column on streams will 
be added with a custom name of the host for later identification. 
 
-**-u  - -useidentifier=**
+**-ui  - -useidentifier=**
 
 Boolean to indicate if the extra column will be added.
 
-**-n  - -name=**
+**-in  - -name=**
 
 Custom name of the host. By default is the host's MAC address.
 
-
 Web Server Listening
 --------------------
 
@@ -71,7 +70,6 @@ Listening host of the administration (IO
 
 Listening port of the administration (IOT) server. By default is on port 
:code:`8001`.
 
-
 Database Connection
 -------------------
 
@@ -79,18 +77,18 @@ Credentials for the MAPI connection to M
 
 .. note:: The user password will be prompted during the initialization of the 
server.
 
-**-dh  - -dhostname=**
+**-d  - -host=**
 
 Listening host of MonetDB database. By default is on :code:`127.0.0.1`.
 
-**-dp  - -dport=**
+**-d  - -port=**
 
 Listening port of MonetDB database. By default is on port :code:`50000`.
 
-**-du  - -duser=**
+**-u  - -user=**
 
 Name of the user to authenticate. By default is user :code:`monetdb`.
 
-**-dd  - -ddatabase=**
+**-d  - -database=**
 
 Name of database to use. By default is :code:`iotdb` database.
diff --git a/clients/iotclient/documentation/restful_resources.rst 
b/clients/iotclient/documentation/restful_resources.rst
--- a/clients/iotclient/documentation/restful_resources.rst
+++ b/clients/iotclient/documentation/restful_resources.rst
@@ -1,11 +1,10 @@
 .. _restful_resources:
 
-
 *****************
 RESTful Resources
 *****************
 
-Bellow is lested the available RESTful resource for both servers on IOT 
application. In case of error, the server will return the error message with 
the respective HTTP response code. 
+Bellow is listed the available RESTful resources for both servers on the 
server. In case of error, the server will return the error message with the 
respective HTTP response code.
 
 .. important:: All the keywords provided on JSON must be lower case, as well 
the column data types.
 
@@ -109,7 +108,7 @@ Same resource as streams_ .
 
 **POST**
 
-Insert a batch of tuples on the provided stream in the URL. The insert must be 
an array of JSON object with pairs of column-value. All tuples are validaded 
according to the defined data types on each column. If there is an invalid 
tuple, none of the tuples is inserted. The implicit timestamp and the host 
identifier are automatically added. Bellow is shown an example to insert 
several tuples on the stream in streams_:
+Insert a batch of tuples on the provided stream in the URL. The insert must be 
an array of JSON object with pairs of column-value. All tuples are validated 
according to the defined data types on each column. If there is an invalid 
tuple, none of the tuples is inserted. The implicit timestamp and the host 
identifier are automatically added. Bellow is shown an example to insert 
several tuples on the stream in streams_:
 
 .. code-block:: json
 
diff --git a/clients/iotclient/documentation/streams_data_types.rst 
b/clients/iotclient/documentation/streams_data_types.rst
--- a/clients/iotclient/documentation/streams_data_types.rst
+++ b/clients/iotclient/documentation/streams_data_types.rst
@@ -4,7 +4,7 @@
 Available Data Types
 ********************
 
-The following list contains the available data types for columns creation on 
the stream engine. The list was made as much compatible with `MonetDB's data 
types <https://www.monetdb.org/Documentation/Manuals/SQLreference/Datatypes>`_. 
For each column definiton, one of the types from the list must be provided 
along with its name.      
+The following list contains the available data types for columns creation on 
the stream engine. The list was made as much compatible with `MonetDB's data 
types <https://www.monetdb.org/Documentation/Manuals/SQLreference/Datatypes>`_. 
For each column definition, one of the types from the list must be provided 
along with its name.
 
 By default a column is not nullable, but the pair :code:`"nullable": true` can 
be provided to make it nullable. There is also the possibility to add a default 
value if the column value is not present on a JSON insert tuple (ex: 
:code:`"default": "text"`). The default value is validated against the column's 
validation during the stream creation.
 
@@ -23,7 +23,7 @@ MonetDB's string types with unbounded le
 Char, Character, Varchar, Character Varying
 -------------------------------------------
 
-MonetDB's string types with a bounded length. The :code:`limit` parameter must 
be provided as an interger. The insertion must be provided as a JSON string 
within the limit.
+MonetDB's string types with a bounded length. The :code:`limit` parameter must 
be provided as an integer. The insertion must be provided as a JSON string 
within the limit.
 
 UUID
 ----
@@ -55,7 +55,7 @@ An *IPv6* address. The value must be a J
 Regex
 -----
 
-A string allways validated with a provided regular expression. The JSON must 
contain a :code:`regex` key with the regular expression. As MonetDB doesn't 
have a Regex equivalent data type yet, the data is stored as :code:`string`.
+A string always validated with a provided regular expression. The JSON must 
contain a :code:`regex` key with the regular expression. As MonetDB doesn't 
have a Regex equivalent data type yet, the data is stored as :code:`string`.
 
 Enum
 ----
diff --git a/clients/iotclient/requirements.txt 
b/clients/iotclient/requirements.txt
--- a/clients/iotclient/requirements.txt
+++ b/clients/iotclient/requirements.txt
@@ -2,8 +2,8 @@ Flask-RESTful==0.3.5
 jsonschema==2.5.1
 rfc3987==1.3.5
 strict-rfc3339==0.6
-python-dateutil==2.5.2
-pytz==2016.3
+python-dateutil==2.5.3
+pytz==2016.4
 pymonetdb==0.1.1
 tzlocal==1.2.2
 Sphinx==1.4.1
diff --git a/clients/iotclient/src/Flask/restresources.py 
b/clients/iotclient/src/Flask/restresources.py
--- a/clients/iotclient/src/Flask/restresources.py
+++ b/clients/iotclient/src/Flask/restresources.py
@@ -26,7 +26,7 @@ def init_rest_resources():
     try:
         Streams_Context = IOTStreams()
     except BaseException as ex:
-        print >> sys.stderr, ex
+        print >> sys.stdout, ex
         add_log(50, ex.message)
         sys.exit(1)
 
@@ -56,7 +56,7 @@ class StreamInput(Resource):  # TODO the
         except BaseException as ex:
             add_log(50, ex.message)
             return ex.message, 400
-        return '', 201
+        return 'The insertions were made with success!', 201
 
 
 class StreamsInfo(Resource):
@@ -81,7 +81,7 @@ class StreamsHandling(Resource):
             add_log(50, ex.message)
             return ex.message, 400
         else:
-            return '', 201
+            return 'The stream was created with success!', 201
 
     def delete(self):
         try:
@@ -96,4 +96,4 @@ class StreamsHandling(Resource):
         except BaseException as ex:
             add_log(50, ex.message)
             return ex.message, 404
-        return '', 204
+        return 'The stream was deleted with success!', 204
diff --git a/clients/iotclient/src/Settings/filesystem.py 
b/clients/iotclient/src/Settings/filesystem.py
--- a/clients/iotclient/src/Settings/filesystem.py
+++ b/clients/iotclient/src/Settings/filesystem.py
@@ -38,7 +38,7 @@ def init_file_system(host_identifier=Non
 
         Host_Identifier = host_identifier
     except (Exception, OSError) as ex:
-        print >> sys.stderr, ex
+        print >> sys.stdout, ex
         add_log(50, ex.message)
         sys.exit(1)
 
diff --git a/clients/iotclient/src/Settings/iotlogger.py 
b/clients/iotclient/src/Settings/iotlogger.py
--- a/clients/iotclient/src/Settings/iotlogger.py
+++ b/clients/iotclient/src/Settings/iotlogger.py
@@ -7,7 +7,6 @@ if sys.platform in ("linux", "linux2", "
 elif sys.platform == "win32":
     logging_location = os.path.join(os.path.dirname(__file__), os.pardir, 
'iot.log')
 
-logging_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
 logger = logging.getLogger("IOTLog")
 
 
@@ -21,7 +20,7 @@ def init_logging():
     try:
         logger = logging.getLogger("IOTLog")
         logger.setLevel(logging.DEBUG)
-        formatter = logging.Formatter(logging_format)
+        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s 
- %(message)s')
 
         logging_path = os.path.dirname(logging_location)
         if not os.path.exists(logging_path):
@@ -30,7 +29,7 @@ def init_logging():
         log_handler.setFormatter(formatter)
         logger.addHandler(log_handler)
     except (Exception, OSError) as ex:
-        print >> sys.stderr, ex
+        print >> sys.stdout, ex
         sys.exit(1)
 
 
diff --git a/clients/iotclient/src/Settings/mapiconnection.py 
b/clients/iotclient/src/Settings/mapiconnection.py
--- a/clients/iotclient/src/Settings/mapiconnection.py
+++ b/clients/iotclient/src/Settings/mapiconnection.py
@@ -10,7 +10,10 @@ Connection = None
 def init_monetdb_connection(hostname, port, user_name, database):
     global Connection
 
-    user_password = getpass.getpass(prompt='User password:')
+    user_password = getpass.getpass(prompt='Insert password for user ' + 
user_name + ':')
+
+    if user_password == '':
+        user_password = 'monetdb'
 
     try:  # the autocommit is set to true so each statement will be independent
         Connection = pymonetdb.connect(hostname=hostname, port=port, 
username=user_name, password=user_password,
@@ -19,7 +22,7 @@ def init_monetdb_connection(hostname, po
         print >> sys.stdout, log_message
         add_log(20, log_message)
     except BaseException as ex:
-        print >> sys.stderr, ex.message
+        print >> sys.stdout, ex.message
         add_log(50, ex.message)
         sys.exit(1)
 
diff --git a/clients/iotclient/src/Streams/datatypes.py 
b/clients/iotclient/src/Streams/datatypes.py
--- a/clients/iotclient/src/Streams/datatypes.py
+++ b/clients/iotclient/src/Streams/datatypes.py
@@ -571,11 +571,11 @@ class BaseDateTimeType(StreamDataType): 
             return self.pack_next_value(None, counter, parameters, errors)
         parsed = self.parse_entry(entry)
         if hasattr(self, '_minimum') and not hasattr(self, '_maximum') and 
parsed < self._minimum:
-            errors[counter] = 'The value is higher than the minimum: %s < %s!' 
% (self._minimum_text, parsed)
+            errors[counter] = 'The value is higher than the minimum: %s < %s!' 
% (parsed, self._minimum_text)
         elif hasattr(self, '_maximum') and not hasattr(self, '_minimum') and 
parsed > self._maximum:
             errors[counter] = 'The value is higher than the maximum: %s > %s!' 
% (parsed, self._maximum_text)
         elif hasattr(self, '_maximum') and hasattr(self, '_minimum') and 
parsed < self._minimum:
-            errors[counter] = 'The value is out of range: %s < %s!' % 
(self._minimum_text, parsed)
+            errors[counter] = 'The value is out of range: %s < %s!' % (parsed, 
self._minimum_text)
         elif hasattr(self, '_maximum') and hasattr(self, '_minimum') and 
parsed > self._maximum:
             errors[counter] = 'The value is out of range: %s > %s!' % (parsed, 
self._maximum_text)
         return self.pack_next_value(parsed, counter, parameters, errors)
diff --git a/clients/iotclient/src/Streams/flushing.py 
b/clients/iotclient/src/Streams/flushing.py
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to