ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Active_prgs/Redgrave/EndoIGServerAnalyzer.py
Revision: 772
Committed: Thu Aug 4 19:35:33 2022 UTC (3 years, 7 months ago) by nino.borges
Content type: text/x-python
File size: 10039 byte(s)
Log Message:
Version 2 where the appList and fields were changed to Sets to avoid duplicates.

File Contents

# User Rev Content
1 nino.borges 771 """
2    
3     EndoIGServerAnalyzer
4    
5     Created by:
6     Emanuel Borges
7     07.28.2022
8    
9     This program will take two CSV files and do a row to row compare. For this to work both CSVs need to have the same colums.
10     Set colOmitList to FALSE if you dont want it to parse at all and remove any columns. for that to work though you have to normalize the date
11     and number fields.
12    
13     NOTE: the application List file HAS pipes in it, so carefully select which columns you use.
14    
15     """
16    
17     import os
18    
19    
20     if __name__ == '__main__':
21    
22     outputFileName = r"C:\Users\eborges\Documents\Cases\Endo\20220715 - IG Projects\4 - Develop Identification Process to Inventory NCDS stored in Endo IT\20220804-WindowsServer8_Matrix_Report.csv"
23    
24     ## This should all be csvs with pre-selected fields that are verified didnt already contain pipes. Also a headder row.
25     #win2kServersFile = r"C:\Users\eborges\Documents\Cases\Endo\20220715 - IG Projects\4 - Develop Identification Process to Inventory NCDS stored in Endo IT\_fromEndo\_csv\Win8Servers_filtered.csv"
26     win2kServersFile = r"C:\Users\eborges\Documents\Cases\Endo\20220715 - IG Projects\4 - Develop Identification Process to Inventory NCDS stored in Endo IT\_fromEndo\_csv\Win8Servers_NOFilter.csv"
27    
28     appListServersFile = r"C:\Users\eborges\Documents\Cases\Endo\20220715 - IG Projects\4 - Develop Identification Process to Inventory NCDS stored in Endo IT\_fromEndo\_csv\AppInventory_extraFields.csv"
29     sqlServersListFile = r"C:\Users\eborges\Documents\Cases\Endo\20220715 - IG Projects\4 - Develop Identification Process to Inventory NCDS stored in Endo IT\_fromEndo\_csv\Endo SQL Servers List__As of July 2022.csv"
30     prevSqlServersListFile = r"C:\Users\eborges\Documents\Cases\Endo\20220715 - IG Projects\4 - Develop Identification Process to Inventory NCDS stored in Endo IT\_fromEndo\_csv\SQL Server Report 07212021.csv"
31     aspectDatabasesToServersFile = r"C:\Users\eborges\Documents\Cases\Endo\20220715 - IG Projects\4 - Develop Identification Process to Inventory NCDS stored in Endo IT\_fromEndo\_csv\All_endo_SQL_Server_databases.csv"
32    
33     win2kServersFileMatrix = {}
34     appListServersFileMatrix = {}
35     sqlServersListFileMatrix = {}
36     prevSqlServersListFileMatrix = {}
37     aspectDatabasesToServersMatrix = {}
38    
39     ## Start with ingesting the win2kservers file but be sure to save the headders on this one.
40     contents = open(win2kServersFile).readlines()
41     win2kServersFileHeadders = contents[0]
42     win2kServersFileHeadders = win2kServersFileHeadders.replace("\n","")
43     contents = contents[1:]
44     for line in contents:
45     line = line.replace("\n","")
46     parsedLine = line.split("|")
47     if parsedLine[0].upper() in list(win2kServersFileMatrix.keys()):
48     win2kServersFileMatrix[parsedLine[0].upper()].append(line)
49     else:
50     win2kServersFileMatrix[parsedLine[0].upper()] = [line,]
51     print("There are %s servers to start with."%len(list(win2kServersFileMatrix.keys())))
52    
53    
54     ## Next ingest the SQL servers list
55     contents = open(sqlServersListFile).readlines()
56     contents = contents[1:]
57     for line in contents:
58     line = line.replace("\n","")
59     parsedLine = line.split("|")
60     if parsedLine[0].upper() in list(sqlServersListFileMatrix.keys()):
61     sqlServersListFileMatrix[parsedLine[0].upper()].append(line)
62     else:
63     sqlServersListFileMatrix[parsedLine[0].upper()] = [line,]
64     print("There are %s servers on the SQL Servers file."%len(list(sqlServersListFileMatrix.keys())))
65    
66    
67     ## Next ingest the older SQL servers list
68     contents = open(prevSqlServersListFile).readlines()
69     contents = contents[1:]
70     for line in contents:
71     line = line.replace("\n","")
72     parsedLine = line.split("|")
73     if parsedLine[0].upper() in list(prevSqlServersListFileMatrix.keys()):
74     prevSqlServersListFileMatrix[parsedLine[0].upper()].append(line)
75     else:
76     prevSqlServersListFileMatrix[parsedLine[0].upper()] = [line,]
77     print("There are %s servers on the older SQL servers file."%len(list(prevSqlServersListFileMatrix.keys())))
78    
79    
80     ## Next ingest the databasename to server list from aspect
81     contents = open(aspectDatabasesToServersFile).readlines()
82     contents = contents[1:]
83     for line in contents:
84     line = line.replace("\n","")
85     parsedLine = line.split("|")
86     if parsedLine[0].upper() in list(aspectDatabasesToServersMatrix.keys()):
87     aspectDatabasesToServersMatrix[parsedLine[0].upper()].append(line)
88     else:
89     aspectDatabasesToServersMatrix[parsedLine[0].upper()] = [line,]
90     print("There are %s servers on the aspect databases to servers file."%len(list(aspectDatabasesToServersMatrix.keys())))
91    
92     ## Next is the app inventory which must first be parsed.
93     contents = open(appListServersFile).readlines()
94     contents = contents[1:]
95     for line in contents:
96     line = line.replace("\n","")
97     parsedLine = line.split("|")
98     parsedServerList = parsedLine[4].replace("#","")
99     parsedServerList = parsedServerList.split(";")
100     for s in parsedServerList:
101     if s.isnumeric():
102     pass
103     else:
104     if s.upper() in list(appListServersFileMatrix.keys()):
105     appListServersFileMatrix[s.upper()].append(line)
106     else:
107     appListServersFileMatrix[s.upper()] = [line,]
108     print("There are %s servers on the application list."%len(list(appListServersFileMatrix.keys())))
109    
110    
111     outputFile = open(outputFileName,'w')
112 nino.borges 772 outputFile.write(win2kServersFileHeadders + "|Found on 2022 SQL Server Report?|Found on 2021 SQL Server Report?|Found DatabaseNames Server Report?|DB Names Found on AspectList|Found on Application Inventory?|Applications|App IT Leadership Owner|App IT System Owner|App Executive Leadership Owner|App Business Owner\n")
113 nino.borges 771 for i in list(win2kServersFileMatrix.keys()):
114     nl=outputFile.write(win2kServersFileMatrix[i][0])
115    
116     if i in list(sqlServersListFileMatrix.keys()):
117     nl=outputFile.write("|YES")
118     else:
119     nl=outputFile.write("|NO")
120     if i in list(prevSqlServersListFileMatrix.keys()):
121     nl=outputFile.write("|YES")
122     else:
123     nl=outputFile.write("|NO")
124     dbNamesList = ""
125     if i in list(aspectDatabasesToServersMatrix.keys()):
126     nl=outputFile.write("|YES")
127     for dbNameLine in aspectDatabasesToServersMatrix[i]:
128     dbNameLine = dbNameLine.replace("\n","")
129     dbNameLine = dbNameLine.split("|")
130     if dbNamesList:
131     dbNamesList = dbNamesList + "; " +dbNameLine[1]
132     else:
133     dbNamesList = dbNameLine[1]
134     else:
135     nl=outputFile.write("|NO")
136     if dbNamesList:
137     nl=outputFile.write("|" + dbNamesList)
138     else:
139     nl=outputFile.write("|")
140 nino.borges 772 appList = set()
141     itLeadershipOwnerList = set()
142     itSystemOwnerList = set()
143     executiveLeadershipOwnerList = set()
144     businessOwnerList = set()
145     tempOwnerList = ""
146 nino.borges 771 if i in list(appListServersFileMatrix.keys()):
147     nl=outputFile.write("|YES")
148     for appLine in appListServersFileMatrix[i]:
149     appLine = appLine.replace("\n","")
150     appLine = appLine.split("|")
151 nino.borges 772 appList.add(appLine[1]+' [AppID=%s]'%appLine[0])
152     tempOwnerList = appLine[5].replace("#","")
153     tempOwnerList = tempOwnerList.split(";")
154     for o in tempOwnerList:
155     if o.isnumeric():
156     pass
157     else:
158     itLeadershipOwnerList.add(o+' [AppID=%s]'%appLine[0])
159     tempOwnerList = appLine[6].replace("#","")
160     tempOwnerList = tempOwnerList.split(";")
161     for o in tempOwnerList:
162     if o.isnumeric():
163     pass
164     else:
165     itSystemOwnerList.add(o+' [AppID=%s]'%appLine[0])
166     tempOwnerList = appLine[7].replace("#","")
167     tempOwnerList = tempOwnerList.split(";")
168     for o in tempOwnerList:
169     if o.isnumeric():
170     pass
171     else:
172     executiveLeadershipOwnerList.add(o+' [AppID=%s]'%appLine[0])
173     tempOwnerList = appLine[8].replace("#","")
174     tempOwnerList = tempOwnerList.split(";")
175     for o in tempOwnerList:
176     if o.isnumeric():
177     pass
178     else:
179     businessOwnerList.add(o+' [AppID=%s]'%appLine[0])
180     ## if appList:
181     ## appList = appList + '; ' + appLine[1]+' [AppID=%s]'%appLine[0]
182     ## else:
183     ## appList = appLine[1]+' [AppID=%s]'%appLine[0]
184 nino.borges 771 else:
185     nl=outputFile.write("|NO")
186     if appList:
187 nino.borges 772 nl=outputFile.write("|" + "; ".join(appList))
188 nino.borges 771 else:
189     nl=outputFile.write("|")
190 nino.borges 772 if itLeadershipOwnerList:
191     nl=outputFile.write("|" + "; ".join(itLeadershipOwnerList))
192     else:
193     nl=outputFile.write("|")
194     if itSystemOwnerList:
195     nl=outputFile.write("|" + "; ".join(itSystemOwnerList))
196     else:
197     nl=outputFile.write("|")
198     if executiveLeadershipOwnerList:
199     nl=outputFile.write("|" + "; ".join(executiveLeadershipOwnerList))
200     else:
201     nl=outputFile.write("|")
202     if businessOwnerList:
203     nl=outputFile.write("|" + "; ".join(businessOwnerList))
204     else:
205     nl=outputFile.write("|")
206 nino.borges 771 nl = outputFile.write("\n")
207     outputFile.close()