384
edits
Changes
update deadlines for fall
'''Due Date:''' Please follow the three stages of submission schedule:
* Complete the requirements for the first milestone and push to GitHub by April 4November 25, 2021 2022 by 11:59 PM,* Complete the requirements for the second milestone and push to GitHub by December 2, 2022 by 11:59 PM,* Complete the your Python script and push to GitHub by April 18, 2021 December 9 2022 at 11:59 PM, and* Copy your Python script into a Word document and submit to Blackboard by April 18December 9, 2021 2022 at 11:59 PM.
==Overview==
* the <b>os, sys</b> modules
* the <b>argparse</b> module
* The <b>datetime</b> module
* The <b>subprocess</b> module
== Instructions ==
-v, --verbose turn on output verbosity
Copyright 2021 2022 - Eric Brauer
All your Python codes for this assignment must be placed in a <font color='red'><b><u>single source file</u></b></font>. Please include the following declaration by <b><u>you</u></b> as the <font color='blue'><b>script level docstring</b></font> in your Python source code file (replace [Student_id] with your Seneca email user name, and "Student Name" with your own name):
<source>OPS435 Assignment 2 - Winter 2021Fall 2022
Program: assignment2.py
Author: "Student Name"
<li> Run the script itself. Investigate argparse. <b>In the main block, print(args).</b> Experiment with the various options.
<li> Read the usage output in the docs, what option must you implement? Go ahead and implement it. <b>Commit the change.</b>
<li> Use the check script to check your work: <code>./checkA2.py -f -v TestHelp</code>. It should succeed.<li> Investigate the <code>parse_for_user()</code> function, with the <code>usage_data_file</code>. <b>In main, call `parse_for_user()` with `output` as the argument. Investigate what's returned.</b>
<li> <code>parse_for_user()</code> should take the list of lines from the file, and instead return a list of usernames. <b>In main, print the title header and the output. Commit the change.</b>
<li> <b>Once you have `output` --> `parse_for_user()` --> correct output being printed, use if conditions to print only when `-l user` is in the command line arguments.</b>
<li> Test using <bcode>Continue committing these changes as your proceed./checkA2.py -f -v TestList</bcode><li> Implement . You should see some tests succeeding, but some failing. Use the check script to start implementing the same things as parse_for_user but functions needed for <codeb>parse_for_hosts-l host</codeb>. Use the user function to guide you. <li> Compare <b>Continue committing these changes as your output with proceed.</b> Your script should now be passing the output belowTestList tests.<li> Write Now implement the `parse_for_daily()` function using the pseudocode given-d <date> option. This should be taking the will filter your user list of lines from your file, and output a dictionary with start dates in DD/MM/YYYY format as based on the key and usage in seconds as date provided by the valueuser.<li> Use <code> {'01./01/1980': 1200, '02/01/1980': 2400, '03/01/1980': 2200} checkA2.py -f -v TestDate</code>to check your work. <lib> Once your `parse_for_daily()` function works, call it with You have completed the argparse options, and display the contents.first milestone!</b><li> Write (or modify) a function The next stage will be to do implement the same for remote hostsdaily/weekly reports.Use <code>TestDaily<li/code> Implement the outputting of the duration in HH:MM:SS instead of seconds. It's recommended you write a function to take in seconds and return a string. Call this when the `-s` option is absent. Make sure this is working with remote hosts as well. You should now have x of y tests passing.<licode>TestWeekly</code> Finally, implement with the `--monthly` option. Create a new function and get it working. start with seconds, then duration and make sure it works with remote as wellcheck script.
<li> Perform last checks and document your code. Write **why** your code is doing what it does, rather than **what** it's doing. You should have 100% of tests succeeding.
</ol>
List tables should need no extra formatting.
For daily/montly tables with two columns, The first column should be 10 characters long and be left-aligned.
The second column should be 15 characters long and be right-aligned. <pre>Daily Usage Report for rchan < same number of characters============================ <Date Usage < right justified13/02/2018 0:26:00 <15/02/2018 0:33:00Total 0:59:20llllllllllrrrrrrrrrrrrrrr < left column is 10 chars, right column is 15^left just.</pre>
=== Sample Outputs ===
The following are the reports generated by the usage report script (ur.py) with the "usage_data_file" mentioned in the overview section. You can download the file [https://scs.senecac.on.ca/~raymond.chan/ops435/a2/usage_data_file here] to test your ur.py script.
==== User List ====
The following is the user list extracted from the usage_data_file created by the command:
<pre>
[eric@centos a2]$ ./a2assignment2.py -u rchan -t daily usage_data_file
</pre>
The following is a Daily Usage Report created for the Remote Host 10.40.105.103 by the command:
<pre>
[eric@centos7 a2]$ ./a2assignment2.py -r 10.40.105.130 -t daily usage_data_file
</pre>
<pre>
Weekly Usage Report for 10.4340.115105.162130
=====================================
Date Usage
Running the script with <B>no filename</b> as a file argument should call a subprocess.Popen object and run the command <code>last -Fiw</code>.
<pre>
[eric@mtrx-node06pd ~]$ ./a2assignment2.py -l user
</pre>
<pre>
[eric@mtrx-node06pd ~]$ ./a2assignment2.py -u adas20 -t daily
</pre>
=== First Milestone ===
=== Python script coding and debugging ===
! Task !! Maximum mark !! Actual mark
|-
| Algorithm Submission First Milestone || 10 ||
|-
| Check Script Results || 30 ||
| List Functions || 5 ||
|-
| Daily/Monthly Weekly Functions || 10 ||
|-
| Output Date Functions || 5 ||
|-
| Other Output/other Functions || 5 ||
|-
| Overall Design/Coherence || 10 ||
== Submission ==
* Stage 1: Complete the first milestone on GitHub by April 4November 25, 20212022.* Stage 2: Complete the second milestone on GitHub by December 2, 2022.* Stage 3: Use commits to push your python script for this assignment to Github.com. The final state of your repository will be looked at on April 18December 9, 2021 2022 at 11:59 PM.* Stage 34: Copy your python script into a Word document and submit to Blackboard by April 18December 9, 2021 2022 at 11:59 PM.