On Thu, May 3, 2018 at 6:58 AM, Akshay Joshi <akshay.jo...@enterprisedb.com> wrote:
> Hi > > On Wed, May 2, 2018 at 9:05 PM, Victoria Henry <vhe...@pivotal.io> wrote: > >> Hi Akshay, >> >> Thanks for sending this updated patch. The linter and tests are all >> passing. >> >>> - utils/driver/psycopg2/server_manager.py >>>> - Do we have Unit Tests around this? >>> >>> No. >> >> >> In our opinion, server_manager.py and connection.py should have tests. >> Are you finding it difficult to add tests to these files? >> > > We will have to write test cases from scratch for both the files and it > will take time, there is no point keeping these important feature(SSH > Tunnel) on hold. We can create a separate task for this as we have for > utility(Backup, Maintenance, Restore) modules. > > @Dave your thoughts on this? > I agree. Please add a ticket to add these tests in the future. General tests for those files should not hold up this feature. > >> Sincerely, >> >> Victoria & Joao >> >> >> On Wed, May 2, 2018 at 5:58 AM, Akshay Joshi < >> akshay.jo...@enterprisedb.com> wrote: >> >>> Hi Joao >>> >>> >>> On Thu, Apr 26, 2018 at 10:26 PM, Joao De Almeida Pereira < >>> jdealmeidapere...@pivotal.io> wrote: >>> >>>> Hi Akshay, >>>> >>>> Some suggestions: >>>> - browser/server_groups/servers/__init__py >>>> This file could have been split into separate functionalities. There >>>> is a chunk of changes for connect, why not move that out? Same thing for >>>> create. Do we really need to have full integrationy tests that do a HTTP >>>> request and connect to a real database to do make sure the functionalities >>>> are working? If we isolate these into their own actions we can more easily >>>> get more coverage on the code with tests that would be much faster and >>>> directed. The big advantage of this is that by reading the tests we can >>>> understand what the functions do. Self documenting code. >>>> >>> >>> If I understood you correctly, you want separate connect and create >>> function for SSH Tunnel. If yes I don't think so we should move the SSH >>> code and make the rest of the code duplicated in two different functions. >>> For "create" function I have just added logic to pass SSH tunnel parameter >>> while creating server object, encrypt the tunnel password and send it to >>> connect method. For "connect" function encrypt the password and send it >>> connect method as parameter. There is no point for such small changes we >>> should create two separate functions. >>> >>>> >>>> - utils/driver/psycopg2.py same comments has above >>>> >>> >>> I think you are talking about "utils/driver/psycopg2/connection.py". >>> Same comments as above. >>> >>>> >>>> - browser/server_groups/servers/static/js/server.js: >>>> - The patterm of using `m` for `model`? is a bad pattern, so why not >>>> change it? >>>> >>> >>> Fixed. >>> >>>> - We could extract the model creation from this file. This will allow >>>> us to add some tests around disabled methods that are a bit everywhere >>>> >>> Model creation is the main functionality of the "server.js" (or >>> any other module file), code readability wise it should be in the same >>> file. If we will do it for rest of the modules then there are so many java >>> script files where model creation is in separate file. >>> >>> - We could also convert this file to ES6 >>>> >>> >>> I am new to this, so will need to learn first. We can create a >>> separate task to do this. >>> >>>> >>>> - utils/driver/psycopg2/server_manager.py >>>> - Do we have Unit Tests around this? >>>> >>> >>> No. >>> >>>> - Maybe this SSH part could be isolated into it's own class, as it is >>>> not 100% related to the class in question. We need to use it but is is not >>>> part of the ServerManager domain >>>> >>> >>> According to me SSH Tunnel parameters is the part of server >>> manager as we do have other parameters of Server dialog. We can isolate >>> the SSH part in other class, but most of the modules (including Server >>> module) have access to the ServerManager. If we will isolate that part >>> then anyways we will have to write wrapper functions in ServerManager >>> which will eventually call functions of new SSH class. >>> >>> As one ServerManager object belongs to one server, similarly one >>> SSH Tunnel belongs to one server. When SSH tunnel gets created it will >>> return local bind port, where rest of the communication should be done on >>> local host and the local bind port return by the "SSHTunnelForwarder" >>> class, so that need to be in the ServerManager. >>> >>> Considering above I have kept that logic in ServerManager. >>> >>>> >>>> >>>> - JS template. Eventually I would like to see if completely removed, >>>> and the information that we are generating using the template can be passed >>>> to the frontend via a Ajax call as an example( Do not think this is the >>>> time to do it.) >>>> >>>> - start_running_query.py >>>> - we could enrich the tests of this functionality >>>> >>> >>> Added one test case for SSHTunnelConnectionLost. >>> >>>> >>>> >>>> And example of naming is for example on psycopg2/connection.py >>>> >>>> mgr = self.manager >>>> >>>> How much to we win by having this variable name versus manager = >>>> self.manager or even using the self.manager? >>>> >>> >>> Fixed. Replace "mgr" with "manager" almost at 69 places in the file. >>> >>> Attached is the modified patch. Please review it. >>> >>>> >>>> >>>> This is not for you in specific, but for @hackers in general: >>>> The book https://www.amazon.com/dp/0132350882/ >>>> <https://www.amazon.com/dp/0132350882/?tag=stackoverflow17-20> is a >>>> pretty nice book that gives you an introduction to clean code, that is self >>>> documenting and that is much easily maintained. >>>> >>>> Thanks >>>> Joao >>>> >>>> On Thu, Apr 26, 2018 at 3:44 AM Akshay Joshi < >>>> akshay.jo...@enterprisedb.com> wrote: >>>> >>>>> Hi Hackers, >>>>> >>>>> Attached is the updated patch which includes documentation of the >>>>> feature and also updated screenshots of server dialog with new "SSH >>>>> Tunnel" >>>>> tab. >>>>> >>>>> On Wed, Apr 25, 2018 at 11:45 AM, Akshay Joshi < >>>>> akshay.jo...@enterprisedb.com> wrote: >>>>> >>>>>> Hi Joao >>>>>> >>>>>> On Tue, Apr 24, 2018 at 10:04 PM, Joao De Almeida Pereira < >>>>>> jdealmeidapere...@pivotal.io> wrote: >>>>>> >>>>>>> Hi Akshay, >>>>>>> >>>>>>> After looking through the patch we found some one letter variable >>>>>>> names and this is a regression on what we have been trying to >>>>>>> accomplish in >>>>>>> the last year. >>>>>>> >>>>>>> An objective that we have for pgAdmin source code is to increase the >>>>>>> testability of it and make it more readable. If we keep on adding one >>>>>>> letter variables and if we continue adding code to already convoluted >>>>>>> source files it is going to be very hard to achieve this objective. >>>>>>> >>>>>> >>>>>> At my level I have tried not to give one letter variable >>>>>> names. Are you talking about the variable "m" in server.js file >>>>>> which represents the Model? If yes then I have followed the code written >>>>>> for whole schema and I thought we have to maintain the consistency, so >>>>>> use >>>>>> that as it is. Apart from that I haven't seen any other one letter >>>>>> variable, please correct me so that I'll rename it. >>>>>> >>>>>>> >>>>>>> Our recommendations for this change are: >>>>>>> - Name the variables with comprehensive names >>>>>>> >>>>>> Can you please suggest from the patch. >>>>>> >>>>>> >>>>>>> - Extract functions where we can and try to wrap some tests around >>>>>>> them (ex: the javascript disabled functions) >>>>>>> >>>>>> >>>>>> I have tried to do that too, if you can see the "server/__init__. >>>>>> py" file I have created "*get_response_for_password" function to >>>>>> remove redundant code. Based on the condition it will return the json >>>>>> response.* >>>>>> >>>>>> >>>>>>> - We really need to find a better pattern than templated Javascript >>>>>>> to pass information from the backend to the frontend >>>>>>> >>>>>> - When changing a piece of code, if we see code that is confusing or >>>>>>> that is hard to read, we should refactor instead of adding to the >>>>>>> pattern. >>>>>>> >>>>>> >>>>>> Please elaborate more with respect to my patch, which part of >>>>>> code should required modification? >>>>>> >>>>>>> >>>>>>> Thanks >>>>>>> Victoria & Joao >>>>>>> >>>>>>> >>>>>>> On Tue, Apr 24, 2018 at 10:13 AM Akshay Joshi < >>>>>>> akshay.jo...@enterprisedb.com> wrote: >>>>>>> >>>>>>>> Hi Hackers >>>>>>>> >>>>>>>> As per suggestion by Dave, I have moved "Advanced" tab at the last >>>>>>>> for Server dialog. Attached is the modified patch. >>>>>>>> >>>>>>>> On Mon, Apr 23, 2018 at 7:32 PM, Anthony Emengo <aeme...@pivotal.io >>>>>>>> > wrote: >>>>>>>> >>>>>>>>> For what it is worth, I manually verified that the feature worked, >>>>>>>>> as well as looked through the code. >>>>>>>>> >>>>>>>>> I'd like to see end-to-end testing for regression sake, but it's >>>>>>>>> hard to so at this moment. >>>>>>>>> >>>>>>>>> - Anthony and Joao. >>>>>>>>> >>>>>>>>> On Mon, Apr 23, 2018 at 5:09 AM, Akshay Joshi < >>>>>>>>> akshay.jo...@enterprisedb.com> wrote: >>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Mon, Apr 23, 2018 at 1:30 PM, Dave Page <dp...@pgadmin.org> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Hi >>>>>>>>>>> >>>>>>>>>>> On Thu, Apr 19, 2018 at 6:56 PM, Anthony Emengo < >>>>>>>>>>> aeme...@pivotal.io> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hey Akshay >>>>>>>>>>>> >>>>>>>>>>>> This patch passed our test pipelines. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Did you test the feature and//or review the code and tests? >>>>>>>>>>> Passing the tests is great, *if* the whole feature is covered (and >>>>>>>>>>> the >>>>>>>>>>> nature of this patch will make that quite difficult, maybe >>>>>>>>>>> impossible to do >>>>>>>>>>> without external infrastructure and config). >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Agreed, it's been difficult to write test case to test the >>>>>>>>>> complete feature. >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Anthony and Victoria >>>>>>>>>>>> >>>>>>>>>>>> On Thu, Apr 19, 2018 at 1:48 AM, Akshay Joshi < >>>>>>>>>>>> akshay.jo...@enterprisedb.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi Hackers >>>>>>>>>>>>> >>>>>>>>>>>>> I have implemented the SSH Tunnel support using >>>>>>>>>>>>> https://pypi.org/project/sshtunnel/ python package. Added >>>>>>>>>>>>> "SSH Tunnel" Tab in server dialog. This implementation supports >>>>>>>>>>>>> user name >>>>>>>>>>>>> /password and private/public key combination with Passphrase to >>>>>>>>>>>>> crate SSH >>>>>>>>>>>>> Tunnel. I have added regression test case to add server using SSH >>>>>>>>>>>>> Tunnel >>>>>>>>>>>>> options. >>>>>>>>>>>>> >>>>>>>>>>>>> The given python package(https://pypi.org/project/sshtunnel/) >>>>>>>>>>>>> support >>>>>>>>>>>>> Python version *2.7, 3.4+*. >>>>>>>>>>>>> It uses Paramiko (Python implementation of SSHv2 protocol) >>>>>>>>>>>>> which actually drops support for Python 2.6. So I have added >>>>>>>>>>>>> *SUPPORT_SSH_TUNNEL* parameter in config.py which checks the >>>>>>>>>>>>> python version and set the flag accordingly. In case of Python >>>>>>>>>>>>> 2.6, 3.0, >>>>>>>>>>>>> 3.1, 3.2 and 3.3 control on the "SSH Tunnel" tab of server dialog >>>>>>>>>>>>> will be >>>>>>>>>>>>> disabled. >>>>>>>>>>>>> >>>>>>>>>>>>> Please review it, and if looks good please commit the code. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> *Akshay Joshi* >>>>>>>>>>>>> >>>>>>>>>>>>> *Sr. Software Architect * >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 >>>>>>>>>>>>> 976-788-8246 <+91%2097678%2088246>* >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Dave Page >>>>>>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>>>>>> Twitter: @pgsnake >>>>>>>>>>> >>>>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>>>>>> The Enterprise PostgreSQL Company >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> *Akshay Joshi* >>>>>>>>>> >>>>>>>>>> *Sr. Software Architect * >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 >>>>>>>>>> 976-788-8246 <+91%2097678%2088246>* >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> *Akshay Joshi* >>>>>>>> >>>>>>>> *Sr. Software Architect * >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 >>>>>>>> 976-788-8246 <+91%2097678%2088246>* >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> *Akshay Joshi* >>>>>> >>>>>> *Sr. Software Architect * >>>>>> >>>>>> >>>>>> >>>>>> *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 >>>>>> 976-788-8246 <+91%2097678%2088246>* >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> *Akshay Joshi* >>>>> >>>>> *Sr. Software Architect * >>>>> >>>>> >>>>> >>>>> *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 >>>>> 976-788-8246 <+91%2097678%2088246>* >>>>> >>>> >>> >>> >>> -- >>> *Akshay Joshi* >>> >>> *Sr. Software Architect * >>> >>> >>> >>> *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* >>> >> >> > > > -- > *Akshay Joshi* > > *Sr. Software Architect * > > > > *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* > -- Dave Page Blog: http://pgsnake.blogspot.com Twitter: @pgsnake EnterpriseDB UK: http://www.enterprisedb.com The Enterprise PostgreSQL Company