Compare commits
34 Commits
Author | SHA1 | Date | |
---|---|---|---|
447f83f327 | |||
1ab4316c22 | |||
ffc2fbf634 | |||
e02ad376ad | |||
9fe4327850 | |||
5cccb6609f | |||
81a0ef2adc | |||
03bd20fc8c | |||
3dd4034a84 | |||
f684c4b7ef | |||
4cc5219409 | |||
6668806432 | |||
e084fdd58f | |||
6b409294e4 | |||
9774b0cc53 | |||
c82a8790e7 | |||
c68b853c64 | |||
2f3f1b7947 | |||
c655ed5c6b | |||
70c1e1a52a | |||
72b648589e | |||
66f38fcf33 | |||
994556d453 | |||
8040a7c6b5 | |||
de048b6842 | |||
db44756142 | |||
66f9347223 | |||
a0d0f33c83 | |||
1712743c46 | |||
bff76a503a | |||
97c9c3c264 | |||
8e15b6a3a5 | |||
f3d199cccb | |||
a25dc93610 |
@ -1,3 +1,19 @@
|
|||||||
|
[*.md]
|
||||||
|
end_of_line = crlf
|
||||||
|
file_header_template = unset
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = false
|
||||||
|
root = true
|
||||||
|
tab_width = 2
|
||||||
|
[*.csproj]
|
||||||
|
end_of_line = crlf
|
||||||
|
file_header_template = unset
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = false
|
||||||
|
root = true
|
||||||
|
tab_width = 2
|
||||||
[*.cs]
|
[*.cs]
|
||||||
csharp_indent_block_contents = true
|
csharp_indent_block_contents = true
|
||||||
csharp_indent_braces = false
|
csharp_indent_braces = false
|
||||||
@ -13,6 +29,7 @@ csharp_new_line_before_members_in_object_initializers = true
|
|||||||
csharp_new_line_before_open_brace = all
|
csharp_new_line_before_open_brace = all
|
||||||
csharp_new_line_between_query_expression_clauses = true
|
csharp_new_line_between_query_expression_clauses = true
|
||||||
csharp_prefer_braces = false
|
csharp_prefer_braces = false
|
||||||
|
csharp_prefer_qualified_reference = true:error
|
||||||
csharp_prefer_simple_default_expression = true:warning
|
csharp_prefer_simple_default_expression = true:warning
|
||||||
csharp_prefer_simple_using_statement = true:warning
|
csharp_prefer_simple_using_statement = true:warning
|
||||||
csharp_prefer_static_local_function = true:warning
|
csharp_prefer_static_local_function = true:warning
|
||||||
@ -79,13 +96,22 @@ dotnet_code_quality.CAXXXX.api_surface = private, internal
|
|||||||
dotnet_diagnostic.CA1825.severity = warning # CA1823: Avoid zero-length array allocations
|
dotnet_diagnostic.CA1825.severity = warning # CA1823: Avoid zero-length array allocations
|
||||||
dotnet_diagnostic.CA1829.severity = warning # CA1829: Use Length/Count property instead of Count() when available
|
dotnet_diagnostic.CA1829.severity = warning # CA1829: Use Length/Count property instead of Count() when available
|
||||||
dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
|
dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
|
||||||
|
dotnet_diagnostic.CA1860.severity = error # CA1860: Prefer comparing 'Count' to 0 rather than using 'Any()', both for clarity and for performance
|
||||||
|
dotnet_diagnostic.CA1869.severity = none # CA1869: Avoid creating a new 'JsonSerializerOptions' instance for every serialization operation. Cache and reuse instances instead.
|
||||||
|
dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template should not vary between calls to 'LoggerExtensions.LogInformation(ILogger, string?, params object?[])'
|
||||||
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
|
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
|
||||||
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
|
|
||||||
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
|
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
|
||||||
|
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
|
||||||
dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary
|
dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary
|
||||||
|
dotnet_diagnostic.IDE0028.severity = error # IDE0028: Collection initialization can be simplified
|
||||||
|
dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031)
|
||||||
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
|
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
|
||||||
dotnet_diagnostic.IDE0049.severity = warning # Use language keywords instead of framework type names for type references (IDE0049)
|
dotnet_diagnostic.IDE0049.severity = warning # Use language keywords instead of framework type names for type references (IDE0049)
|
||||||
dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter
|
dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter
|
||||||
|
dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [Distance]csharp(IDE0290)
|
||||||
|
dotnet_diagnostic.IDE0300.severity = error # IDE0300: Collection initialization can be simplified
|
||||||
|
dotnet_diagnostic.IDE0301.severity = error #IDE0301: Collection initialization can be simplified
|
||||||
|
dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified
|
||||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
|
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
|
||||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case
|
dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case
|
||||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method
|
dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method
|
||||||
|
7
.gitignore
vendored
7
.gitignore
vendored
@ -52,7 +52,7 @@ BenchmarkDotNet.Artifacts/
|
|||||||
project.lock.json
|
project.lock.json
|
||||||
project.fragment.lock.json
|
project.fragment.lock.json
|
||||||
artifacts/
|
artifacts/
|
||||||
**/Properties/launchSettings.json
|
# **/Properties/launchSettings.json
|
||||||
|
|
||||||
# StyleCop
|
# StyleCop
|
||||||
StyleCopReport.xml
|
StyleCopReport.xml
|
||||||
@ -337,6 +337,9 @@ ASALocalRun/
|
|||||||
!.vscode/tasks.json
|
!.vscode/tasks.json
|
||||||
!.vscode/launch.json
|
!.vscode/launch.json
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
|
!.vscode/thunder-tests/
|
||||||
|
|
||||||
# Libman.json
|
# Libman.json
|
||||||
/wwwroot/lib/*
|
/wwwroot/lib/*
|
||||||
|
|
||||||
|
.kanbn/**/*
|
266
.groovy
266
.groovy
@ -1,266 +0,0 @@
|
|||||||
#!/usr/bin/env groovy
|
|
||||||
/* groovylint-disable CompileStatic, ConsecutiveStringConcatenation, DuplicateNumberLiteral, DuplicateStringLiteral, LineLength, NestedBlockDepth, NoDef, VariableTypeRequired */
|
|
||||||
import groovy.transform.Field
|
|
||||||
|
|
||||||
@Field String _DDrive = 'D:/'
|
|
||||||
@Field String _ExePath = '...'
|
|
||||||
@Field String _NGINXFile = '...'
|
|
||||||
@Field String _PortNumber = '...'
|
|
||||||
@Field String _AssemblyName = '...'
|
|
||||||
@Field String _AgentDevelopment = ''
|
|
||||||
@Field String _NetVersion = 'net6.0'
|
|
||||||
@Field String _GitCommitSeven = '...'
|
|
||||||
@Field String _TargetLocation = '...'
|
|
||||||
@Field String _FirstBeforePlus = '5000'
|
|
||||||
@Field String _GitName = 'OI-Metrology'
|
|
||||||
@Field String _MonARessource = 'OI_Metrology'
|
|
||||||
@Field String _WorkingDirectoryName = 'IFXApps'
|
|
||||||
@Field String _DDriveNet = "${_DDrive}${_NetVersion}"
|
|
||||||
@Field String _AgentStaging = 'messa010ec-ecfisysadmin'
|
|
||||||
@Field String _AgentProduction = 'messa010ec-ecfisysadmin'
|
|
||||||
@Field String _CredentialsId = 'Metrology-Username-Password'
|
|
||||||
@Field String _Company = 'Infineon Technologies Americas Corp.'
|
|
||||||
@Field String _ProgramFilesDotnet = 'C:/program files/dotnet/dotnet.exe'
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
label env.JENKINS_ENVIRONMENT == 'Development' ? _AgentDevelopment : env.JENKINS_ENVIRONMENT == 'Staging' ? _AgentStaging : env.JENKINS_ENVIRONMENT == 'Production' ? _AgentProduction : 'Else'
|
|
||||||
}
|
|
||||||
parameters {
|
|
||||||
string(name: 'MONA_SUFFIX', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? '_IFX' : '_EC', description: 'MonA Suffix')
|
|
||||||
string(name: 'GIT_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'mestsa003.infineon.com' : 'mestsa07ec.ec.local', description: 'git server')
|
|
||||||
string(name: 'DEFAULT_FILE_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'messv02ecc1_ec_local' : 'messv02ecc1.ec.local', description: 'Default file server...')
|
|
||||||
string(name: 'PROJECT_DIRECTORY', defaultValue: 'Archive', description: 'Archive|Viewer')
|
|
||||||
}
|
|
||||||
stages {
|
|
||||||
stage('Git') {
|
|
||||||
steps {
|
|
||||||
bat(returnStatus: true, script: 'git init')
|
|
||||||
bat(returnStatus: true, script: 'git remote add origin \\\\' + params.GIT_SERVER + '\\Git\\' + _GitName + '.git')
|
|
||||||
bat(returnStatus: true, script: 'git pull origin master')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Setup') {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
_AssemblyName = "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}"
|
|
||||||
_GitCommitSeven = '1234567'
|
|
||||||
// _GitCommitSeven = env.GIT_COMMIT.substring(0, 7)
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
def files = findFiles(glob: '*.csproj')
|
|
||||||
if (files.length != 1) {
|
|
||||||
error("Build failed because couldn't find a *.csproj file")
|
|
||||||
}
|
|
||||||
echo """
|
|
||||||
${files[0].name}
|
|
||||||
${files[0].path}
|
|
||||||
${files[0].directory}
|
|
||||||
${files[0].length}
|
|
||||||
${files[0].lastModified}
|
|
||||||
"""
|
|
||||||
_AssemblyName = files[0].name.split('[.]csproj')[0]
|
|
||||||
}
|
|
||||||
_TargetLocation = "\\\\${params.DEFAULT_FILE_SERVER}\\EC_EAFRepository\\${env.JENKINS_ENVIRONMENT}\\DeploymentStorage\\Adaptation_${_AssemblyName}"
|
|
||||||
withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) {
|
|
||||||
dir("C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1/conf/includes") {
|
|
||||||
_NGINXFile = "C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1/conf/includes/${_AssemblyName}.conf"
|
|
||||||
def files = findFiles(glob: "${_AssemblyName}.conf")
|
|
||||||
if (files.length != 1) {
|
|
||||||
writeFile(file: _NGINXFile, text: "location / { proxy_pass http://localhost:${_FirstBeforePlus}; }")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Read NGINX') {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
String text = readFile(file: _NGINXFile)
|
|
||||||
String check = text == null ? _FirstBeforePlus : text.split(';')[0]
|
|
||||||
String[] segments = check.split(':')
|
|
||||||
if (segments.length != 3) {
|
|
||||||
_PortNumber = check
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_PortNumber = (segments[2].toInteger() + 2).toString()
|
|
||||||
}
|
|
||||||
_ExePath = "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}/${_AssemblyName}.exe"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Info') {
|
|
||||||
steps {
|
|
||||||
// echo "GIT_URL_N - ${env.GIT_URL_N}"
|
|
||||||
// echo "BRANCH_NAME ${env.BRANCH_NAME}"
|
|
||||||
// echo "DEPLOY_VERSION ${env.DEPLOY_VERSION}"
|
|
||||||
// echo "GIT_AUTHOR_NAME ${env.GIT_AUTHOR_NAME}"
|
|
||||||
// echo "GIT_LOCAL_BRANCH ${env.GIT_LOCAL_BRANCH}"
|
|
||||||
// echo "GIT_COMMITTER_EMAIL ${env.GIT_COMMITTER_EMAIL}"
|
|
||||||
// echo "GIT_PREVIOUS_COMMIT ${env.GIT_PREVIOUS_COMMIT}"
|
|
||||||
// echo "GIT_PREVIOUS_SUCCESSFUL_COMMIT ${env.GIT_PREVIOUS_SUCCESSFUL_COMMIT}"
|
|
||||||
echo "_AssemblyName ${_AssemblyName}" // ...
|
|
||||||
echo "_ExePath ${_ExePath}" // ...
|
|
||||||
echo "_PortNumber ${_PortNumber}" // ...
|
|
||||||
echo "BUILD_NUMBER ${env.BUILD_NUMBER}" // 11
|
|
||||||
echo "DEFAULT_FILE_SERVER ${params.DEFAULT_FILE_SERVER}" // 11
|
|
||||||
echo "GIT_BRANCH ${env.GIT_BRANCH}" // origin/master
|
|
||||||
echo "GIT_COMMIT ${env.GIT_COMMIT}" // 73b814069f2cf0173a62a8228815a9bc9ba93c41
|
|
||||||
echo "GIT_SERVER ${params.GIT_SERVER}" // ...
|
|
||||||
echo "GIT_URL ${env.GIT_URL}" // D:\ProgramData\Git\....git
|
|
||||||
echo "JENKINS_ENVIRONMENT ${env.JENKINS_ENVIRONMENT}" // 11
|
|
||||||
echo "JENKINS_URL ${env.JENKINS_URL}" // http://localhost:8080/
|
|
||||||
echo "JOB_NAME ${env.JOB_NAME}" // ...
|
|
||||||
echo "PROJECT_DIRECTORY ${env.PROJECT_DIRECTORY}" // ...
|
|
||||||
echo "WORKSPACE ${env.WORKSPACE}" // D:\.jenkins\_\...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// stage('Restore') {
|
|
||||||
// steps {
|
|
||||||
// bat(returnStatus: true, script: 'dotnet --info')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
stage('Safe storage of app secrets') {
|
|
||||||
steps {
|
|
||||||
withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) {
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets init')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "Company" "' + _Company + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "ServiceUser" "' + username + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "BuildNumber" "' + env.BUILD_NUMBER + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "GitCommitSeven" "' + _GitCommitSeven + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "Server" "' + params.DEFAULT_FILE_SERVER + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "URLs" "' + 'http://localhost:' + _PortNumber)
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "WorkingDirectoryName" "' + _WorkingDirectoryName + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "MonARessource" "' + _MonARessource + '_' + env.PROJECT_DIRECTORY + env.MONA_SUFFIX + '"')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// stage('Core Build (packagemanagement.eu.infineon.com)') {
|
|
||||||
// steps {
|
|
||||||
// echo "Build number is ${currentBuild.number}"
|
|
||||||
// dir(env.PROJECT_DIRECTORY) {
|
|
||||||
// bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
// 'build --runtime win-x64 --self-contained --verbosity quiet --source ' +
|
|
||||||
// 'https://packagemanagement.eu.infineon.com:4430/api/v2/')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
stage('Core Build') {
|
|
||||||
steps {
|
|
||||||
echo "Build number is ${currentBuild.number}"
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'build --runtime win-x64 --self-contained --verbosity quiet')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Commit Id') {
|
|
||||||
steps {
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
writeFile(file: 'bin/Debug/' + _NetVersion + "/win-x64/${env.GIT_COMMIT}-${env.BUILD_NUMBER}.txt", text: "${env.GIT_URL}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// stage('Test') {
|
|
||||||
// options {
|
|
||||||
// timeout(time: 10, unit: 'MINUTES')
|
|
||||||
// }
|
|
||||||
// steps {
|
|
||||||
// dir(env.PROJECT_DIRECTORY) {
|
|
||||||
// bat('dotnet --info')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// stage('Version') {
|
|
||||||
// steps {
|
|
||||||
// bat('dotnet --info')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
stage('Package') {
|
|
||||||
steps {
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
fileOperations([fileZipOperation(folderPath: 'bin/Debug/' + _NetVersion + '/win-x64', outputFolderPath: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-Debug")])
|
|
||||||
fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*", renameFiles: false, sourceCaptureExpression: '', targetLocation: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-Debug", targetNameExpression: '')])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Publish') {
|
|
||||||
steps {
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'publish --configuration Release --runtime win-x64 --verbosity quiet ' +
|
|
||||||
"--self-contained true --p:Version=6.0.202-${_GitCommitSeven}-${env.BUILD_NUMBER} -o " +
|
|
||||||
'"' + "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}" + '"')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Service') {
|
|
||||||
steps {
|
|
||||||
withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) {
|
|
||||||
bat(returnStatus: true, script: 'sc create "' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '" ' +
|
|
||||||
'start= delayed-auto DisplayName="' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '" ' +
|
|
||||||
'binPath= "' + _ExePath + '" ' +
|
|
||||||
'obj= "' + "${env.USERDOMAIN}\\${username}" + '" password= "' + password + '"')
|
|
||||||
bat(returnStatus: true, script: 'sc start "' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '"')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Upadate NGINX') {
|
|
||||||
steps {
|
|
||||||
writeFile(file: _NGINXFile, text: "location / { proxy_pass http://localhost:${_PortNumber}; }")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('NGINX Test and Reload') {
|
|
||||||
steps {
|
|
||||||
withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) {
|
|
||||||
dir("C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1") {
|
|
||||||
script {
|
|
||||||
int returnStatus = bat(returnStatus: true, script: 'nginx.exe -t')
|
|
||||||
println("returnStatus ################ ${returnStatus} ####################")
|
|
||||||
if (returnStatus == 0) {
|
|
||||||
bat(returnStatus: true, script: 'nginx.exe -s reload')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// stage('Force Fail') {
|
|
||||||
// steps {
|
|
||||||
// error("Build failed because of this and that..")
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// stage('Copy Files to: file-share') {
|
|
||||||
// steps {
|
|
||||||
// dir(env.PROJECT_DIRECTORY + '/bin/Debug/' + _NetVersion + '/win-x64') {
|
|
||||||
// fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.txt", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
|
|
||||||
// fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.dll", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
|
|
||||||
// fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.exe", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
|
|
||||||
// fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.pdb", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
dir(env.PROJECT_DIRECTORY + '/bin') {
|
|
||||||
deleteDir()
|
|
||||||
}
|
|
||||||
dir(env.PROJECT_DIRECTORY + '/obj') {
|
|
||||||
deleteDir()
|
|
||||||
}
|
|
||||||
// cleanWs()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
53
.vscode/launch.json
vendored
53
.vscode/launch.json
vendored
@ -5,27 +5,68 @@
|
|||||||
// Use IntelliSense to find out which attributes exist for C# debugging
|
// Use IntelliSense to find out which attributes exist for C# debugging
|
||||||
// Use hover for the description of the existing attributes
|
// Use hover for the description of the existing attributes
|
||||||
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
|
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
|
||||||
"name": ".NET Core Launch (web)",
|
"name": ".NET Core Launch (web) - Server",
|
||||||
"type": "coreclr",
|
"type": "coreclr",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"preLaunchTask": "build",
|
"preLaunchTask": "buildServer",
|
||||||
// If you have changed target frameworks, make sure to update the program path.
|
// If you have changed target frameworks, make sure to update the program path.
|
||||||
"program": "${workspaceFolder}/Archive/bin/Debug/net6.0/win-x64/Archive.dll",
|
"program": "${workspaceFolder}/Server/bin/Debug/net7.0/win-x64/OI.Metrology.Server.dll",
|
||||||
"args": [],
|
"args": [],
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}/Server",
|
||||||
"stopAtEntry": false,
|
"stopAtEntry": false,
|
||||||
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
|
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
|
||||||
"serverReadyAction": {
|
"serverReadyAction": {
|
||||||
"action": "openExternally",
|
"action": "openExternally",
|
||||||
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
|
"pattern": "\\bNow listening on:\\s+(https?://\\S+)",
|
||||||
|
"uriFormat": "%s/swagger/index.html"
|
||||||
},
|
},
|
||||||
"env": {
|
"env": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
},
|
},
|
||||||
"sourceFileMap": {
|
"sourceFileMap": {
|
||||||
"/Views": "${workspaceFolder}/Archive/Views"
|
"/Views": "${workspaceFolder}/Server/Views"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": ".NET Core Attach - Server",
|
||||||
|
"type": "coreclr",
|
||||||
|
"request": "attach",
|
||||||
|
"preLaunchTask": "watchServer",
|
||||||
|
"processName": "OI.Metrology.Server.exe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Use IntelliSense to find out which attributes exist for C# debugging
|
||||||
|
// Use hover for the description of the existing attributes
|
||||||
|
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
|
||||||
|
"name": ".NET Core Launch (web) - ClientHub",
|
||||||
|
"type": "coreclr",
|
||||||
|
"request": "launch",
|
||||||
|
"preLaunchTask": "buildClientHub",
|
||||||
|
// If you have changed target frameworks, make sure to update the program path.
|
||||||
|
"program": "${workspaceFolder}/ClientHub/bin/Debug/net7.0/win-x64/OI.Metrology.ClientHub.dll",
|
||||||
|
"args": [],
|
||||||
|
"cwd": "${workspaceFolder}/ClientHub",
|
||||||
|
"stopAtEntry": false,
|
||||||
|
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
|
||||||
|
"serverReadyAction": {
|
||||||
|
"action": "openExternally",
|
||||||
|
"pattern": "\\bNow listening on:\\s+(https?://\\S+)",
|
||||||
|
"uriFormat": "%s/swagger/index.html"
|
||||||
|
},
|
||||||
|
"env": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
},
|
||||||
|
"sourceFileMap": {
|
||||||
|
"/Views": "${workspaceFolder}/ClientHub/Views"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": ".NET Core Attach - ClientHub",
|
||||||
|
"type": "coreclr",
|
||||||
|
"request": "attach",
|
||||||
|
"preLaunchTask": "watchClientHub",
|
||||||
|
"processName": "OI.Metrology.ClientHub.exe"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": ".NET Core Attach",
|
"name": ".NET Core Attach",
|
||||||
"type": "coreclr",
|
"type": "coreclr",
|
||||||
|
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -3,5 +3,7 @@
|
|||||||
"files.exclude": {
|
"files.exclude": {
|
||||||
"**/.git": false
|
"**/.git": false
|
||||||
},
|
},
|
||||||
|
"thunder-client.saveToWorkspace": false,
|
||||||
|
"thunder-client.workspaceRelativePath": ".vscode",
|
||||||
"coverage-gutters.coverageBaseDir": "../.vscode/TestResults/*"
|
"coverage-gutters.coverageBaseDir": "../.vscode/TestResults/*"
|
||||||
}
|
}
|
187
.vscode/tasks.json
vendored
187
.vscode/tasks.json
vendored
@ -2,40 +2,215 @@
|
|||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"tasks": [
|
"tasks": [
|
||||||
{
|
{
|
||||||
"label": "build",
|
"label": "User Secrets Init",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"user-secrets",
|
||||||
|
"-p",
|
||||||
|
"${workspaceFolder}/Server/OI.Metrology.Server.csproj",
|
||||||
|
"init"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "User Secrets Set",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"user-secrets",
|
||||||
|
"-p",
|
||||||
|
"${workspaceFolder}/Server/OI.Metrology.Server.csproj",
|
||||||
|
"set",
|
||||||
|
"_Application",
|
||||||
|
"oi-metrology-viewer.Server"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "buildServer",
|
||||||
"command": "dotnet",
|
"command": "dotnet",
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"args": [
|
"args": [
|
||||||
"build",
|
"build",
|
||||||
"${workspaceFolder}/Archive/Archive.csproj",
|
"${workspaceFolder}/Server/OI.Metrology.Server.csproj",
|
||||||
"/property:GenerateFullPaths=true",
|
"/property:GenerateFullPaths=true",
|
||||||
"/consoleloggerparameters:NoSummary"
|
"/consoleloggerparameters:NoSummary"
|
||||||
],
|
],
|
||||||
"problemMatcher": "$msCompile"
|
"problemMatcher": "$msCompile"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "publish",
|
"label": "buildTests",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"build",
|
||||||
|
"${workspaceFolder}/Tests/OI.Metrology.Tests.csproj",
|
||||||
|
"/property:GenerateFullPaths=true",
|
||||||
|
"/consoleloggerparameters:NoSummary"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "publishServer",
|
||||||
"command": "dotnet",
|
"command": "dotnet",
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"args": [
|
"args": [
|
||||||
"publish",
|
"publish",
|
||||||
"${workspaceFolder}/Archive/Archive.csproj",
|
"${workspaceFolder}/Server/OI.Metrology.Server.csproj",
|
||||||
"/property:GenerateFullPaths=true",
|
"/property:GenerateFullPaths=true",
|
||||||
"/consoleloggerparameters:NoSummary"
|
"/consoleloggerparameters:NoSummary"
|
||||||
],
|
],
|
||||||
"problemMatcher": "$msCompile"
|
"problemMatcher": "$msCompile"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "watch",
|
"label": "testDebug",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"/property:GenerateFullPaths=true",
|
||||||
|
"/consoleloggerparameters:NoSummary"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "testRelease",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"/property:GenerateFullPaths=true",
|
||||||
|
"/consoleloggerparameters:NoSummary",
|
||||||
|
"-c",
|
||||||
|
"Release"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Format",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"format",
|
||||||
|
"--report",
|
||||||
|
".vscode",
|
||||||
|
"--verbosity",
|
||||||
|
"detailed",
|
||||||
|
"--severity",
|
||||||
|
"warn"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "old-watch",
|
||||||
"command": "dotnet",
|
"command": "dotnet",
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"args": [
|
"args": [
|
||||||
"watch",
|
"watch",
|
||||||
"run",
|
"run",
|
||||||
"--project",
|
"--project",
|
||||||
"${workspaceFolder}/Archive/Archive.csproj"
|
"${workspaceFolder}/Server/OI.Metrology.Server.csproj"
|
||||||
],
|
],
|
||||||
"problemMatcher": "$msCompile"
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "watchServer",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"watch",
|
||||||
|
"--launch-profile",
|
||||||
|
"http",
|
||||||
|
"run",
|
||||||
|
"--project",
|
||||||
|
"${workspaceFolder}/Server/OI.Metrology.Server.csproj",
|
||||||
|
"--verbose"
|
||||||
|
],
|
||||||
|
"isBackground": true,
|
||||||
|
"dependsOn": [
|
||||||
|
"build"
|
||||||
|
],
|
||||||
|
"problemMatcher": {
|
||||||
|
"fileLocation": "relative",
|
||||||
|
"pattern": {
|
||||||
|
"regexp": "^([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$",
|
||||||
|
"file": 1,
|
||||||
|
"location": 2,
|
||||||
|
"severity": 3,
|
||||||
|
"code": 4,
|
||||||
|
"message": 5
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"activeOnStart": true,
|
||||||
|
"beginsPattern": "^.*Shutdown requested.*",
|
||||||
|
"endsPattern": "^.*Application started.*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "buildClientHub",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"build",
|
||||||
|
"${workspaceFolder}/ClientHub/OI.Metrology.ClientHub.csproj",
|
||||||
|
"/property:GenerateFullPaths=true",
|
||||||
|
"/consoleloggerparameters:NoSummary"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "publishClientHub",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"publish",
|
||||||
|
"${workspaceFolder}/ClientHub/OI.Metrology.ClientHub.csproj",
|
||||||
|
"/property:GenerateFullPaths=true",
|
||||||
|
"/consoleloggerparameters:NoSummary"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "watchClientHub",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"watch",
|
||||||
|
"--launch-profile",
|
||||||
|
"http",
|
||||||
|
"run",
|
||||||
|
"--project",
|
||||||
|
"${workspaceFolder}/ClientHub/OI.Metrology.ClientHub.csproj",
|
||||||
|
"--verbose"
|
||||||
|
],
|
||||||
|
"isBackground": true,
|
||||||
|
"dependsOn": [
|
||||||
|
"build"
|
||||||
|
],
|
||||||
|
"problemMatcher": {
|
||||||
|
"fileLocation": "relative",
|
||||||
|
"pattern": {
|
||||||
|
"regexp": "^([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$",
|
||||||
|
"file": 1,
|
||||||
|
"location": 2,
|
||||||
|
"severity": 3,
|
||||||
|
"code": 4,
|
||||||
|
"message": 5
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"activeOnStart": true,
|
||||||
|
"beginsPattern": "^.*Shutdown requested.*",
|
||||||
|
"endsPattern": "^.*Application started.*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "File-Folder-Helper AOT s M Self .Kanbn Tasks",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s M '.kanbn/tasks'",
|
||||||
|
"problemMatcher": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
198
.vscode/thunder-tests/thunderActivity.json
vendored
Normal file
198
.vscode/thunder-tests/thunderActivity.json
vendored
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"_id": "646e3a9b-8fe9-4eb3-a532-f94270f752ac",
|
||||||
|
"colId": "history",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "http://localhost:5126/api/inbound/cde",
|
||||||
|
"url": "http://localhost:5126/api/inbound/cde",
|
||||||
|
"method": "POST",
|
||||||
|
"sortNum": 0,
|
||||||
|
"created": "2023-02-28T14:41:33.596Z",
|
||||||
|
"modified": "2023-02-28T15:19:48.924Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"SentToMetrology\": false,\n \"SentToSPC\": false,\n \"AutoOptimizeGain\": \"YES\",\n \"AutoProbeHeightSet\": \"NO\",\n \"Avg\": \"1824.053\",\n \"CellName\": \"CDE2\",\n \"DLRatio\": \"0.9680\",\n \"DataReject\": \"> 3.0Sigma\",\n \"Date\": \"02/27/2023 03:03:00 AM\",\n \"Engineer\": \"Engineer\",\n \"EquipId\": \"CDE2\",\n \"FileName\": \"0 C:\\\\4p_NT\\\\LSL8in.prj\\\\10PT_5mm.rcp\\\\3227D036.RsM 03:03 02/27/23\",\n \"FilePath\": \"\",\n \"Id\": \"-1\",\n \"Layer\": \"\",\n \"LotId\": \"LotID\",\n \"Op\": \"Operator\",\n \"PSN\": \"4628\",\n \"RDS\": \"577845\",\n \"Reactor\": \"20\",\n \"Recipe\": \"LSL8in \\\\ 10PT_5mm\",\n \"ResistivitySpec\": \"\",\n \"Run\": \"20-577845-4628\",\n \"SemiRadial\": \"1.55%\",\n \"StDev\": \"1.33%\",\n \"Temp\": \"19.2\",\n \"UniqueId\": \"21.16;1;95.0;1803.847;270.0_Point-1\",\n \"Zone\": null,\n \"Details\": [\n {\n \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n \"Merit\": \"21.16\",\n \"Pt\": \"1\",\n \"R\": \"95.0\",\n \"Rs\": \"1803.847\",\n \"T\": \"270.0\",\n \"UniqueId\": \"21.16;1;95.0;1803.847;270.0_Point-1\"\n },\n {\n \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n \"Merit\": \"22.39\",\n \"Pt\": \"2\",\n \"R\": \"71.0\",\n \"Rs\": \"1858.424\",\n \"T\": \"270.0\",\n \"UniqueId\": \"22.39;2;71.0;1858.424;270.0_Point-2\"\n },\n {\n \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n \"Merit\": \"21.07\",\n \"Pt\": \"3\",\n \"R\": \"47.0\",\n \"Rs\": \"1834.141\",\n \"T\": \"270.0\",\n \"UniqueId\": \"21.07;3;47.0;1834.141;270.0_Point-3\"\n },\n {\n \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n \"Merit\": \"22.91\",\n \"Pt\": \"4\",\n \"R\": \"23.0\",\n \"Rs\": \"1803.609\",\n \"T\": \"270.0\",\n \"UniqueId\": \"22.91;4;23.0;1803.609;270.0_Point-4\"\n },\n {\n \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n \"Merit\": \"21.94\",\n \"Pt\": \"5\",\n \"R\": \"0.0\",\n \"Rs\": \"1801.623\",\n \"T\": \"0.0\",\n \"UniqueId\": \"21.94;5;0.0;1801.623;0.0_Point-5\"\n },\n {\n \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n \"Merit\": \"25.61\",\n \"Pt\": \"6\",\n \"R\": \"11.0\",\n \"Rs\": \"1803.997\",\n \"T\": \"90.0\",\n \"UniqueId\": \"25.61;6;11.0;1803.997;90.0_Point-6\"\n },\n {\n \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n \"Merit\": \"24.73\",\n \"Pt\": \"7\",\n \"R\": \"35.0\",\n \"Rs\": \"1819.854\",\n \"T\": \"90.0\",\n \"UniqueId\": \"24.73;7;35.0;1819.854;90.0_Point-7\"\n },\n {\n \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n \"Merit\": \"23.13\",\n \"Pt\": \"8\",\n \"R\": \"59.0\",\n \"Rs\": \"1855.965\",\n \"T\": \"90.0\",\n \"UniqueId\": \"23.13;8;59.0;1855.965;90.0_Point-8\"\n },\n {\n \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n \"Merit\": \"23.44\",\n \"Pt\": \"9\",\n \"R\": \"83.0\",\n \"Rs\": \"1853.631\",\n \"T\": \"90.0\",\n \"UniqueId\": \"23.44;9;83.0;1853.631;90.0_Point-9\"\n },\n {\n \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n \"Merit\": \"21.75\",\n \"Pt\": \"10\",\n \"R\": \"95.0\",\n \"Rs\": \"1805.438\",\n \"T\": \"90.0\",\n \"UniqueId\": \"21.75;10;95.0;1805.438;90.0_Point-10\"\n }\n ]\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "7f723103-2cd6-4d09-b780-28afe34b3cd7",
|
||||||
|
"colId": "history",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "Delete",
|
||||||
|
"url": "https://tfs.intra.infineon.com/tfs/manufacturingit/APC%20Trend/_apis/test/runs/413094?api-version=6.0",
|
||||||
|
"method": "DELETE",
|
||||||
|
"sortNum": 0,
|
||||||
|
"created": "2023-03-02T15:43:07.175Z",
|
||||||
|
"modified": "2023-03-02T15:49:54.662Z",
|
||||||
|
"headers": [
|
||||||
|
{
|
||||||
|
"name": "Authorization",
|
||||||
|
"value": "Basic OmtzZHJveW9xMmJsdGI2N2xzN3NmZGhyYXlrY3l6cGlmemtkZjNndGs1bnl4ZnZmZHBqa2E="
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"params": [
|
||||||
|
{
|
||||||
|
"name": "api-version",
|
||||||
|
"value": "6.0",
|
||||||
|
"isPath": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "2874b1ad-b298-48c1-8edb-6fd78ce7d2d9",
|
||||||
|
"colId": "history",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "Get",
|
||||||
|
"url": "https://tfs.intra.infineon.com/tfs/manufacturingit/Mesa_FI/_apis/test/runs?branchName=amaster&api-version=6.0",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 0,
|
||||||
|
"created": "2023-03-02T15:53:18.138Z",
|
||||||
|
"modified": "2023-03-02T16:12:27.892Z",
|
||||||
|
"headers": [
|
||||||
|
{
|
||||||
|
"name": "Authorization",
|
||||||
|
"value": "Basic OmtzZHJveW9xMmJsdGI2N2xzN3NmZGhyYXlrY3l6cGlmemtkZjNndGs1bnl4ZnZmZHBqa2E="
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"params": [
|
||||||
|
{
|
||||||
|
"name": "branchName",
|
||||||
|
"value": "amaster",
|
||||||
|
"isPath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "api-version",
|
||||||
|
"value": "6.0",
|
||||||
|
"isPath": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "ed8728f5-9afa-4e69-bca3-9c059a9a831b",
|
||||||
|
"colId": "history",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "Patch",
|
||||||
|
"url": "https://tfs.intra.infineon.com/tfs/manufacturingit/Mesa_FI/_apis/test/runs/410737?api-version=6.0",
|
||||||
|
"method": "PATCH",
|
||||||
|
"sortNum": 0,
|
||||||
|
"created": "2023-03-02T15:53:18.138Z",
|
||||||
|
"modified": "2023-03-02T15:58:09.720Z",
|
||||||
|
"headers": [
|
||||||
|
{
|
||||||
|
"name": "Authorization",
|
||||||
|
"value": "Basic OmtzZHJveW9xMmJsdGI2N2xzN3NmZGhyYXlrY3l6cGlmemtkZjNndGs1bnl4ZnZmZHBqa2E="
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"params": [
|
||||||
|
{
|
||||||
|
"name": "api-version",
|
||||||
|
"value": "6.0",
|
||||||
|
"isPath": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"name\": \"MET08RESIHGCV\",\n \"comment\": \"40 passed\"\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "727621f0-63a3-4df2-9cfc-2610c532670d",
|
||||||
|
"colId": "history",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "OI-RDS",
|
||||||
|
"url": "http://messa020ec.ec.local/api/oiWizard/materials/rds/578941",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 0,
|
||||||
|
"created": "2023-03-02T18:20:01.561Z",
|
||||||
|
"modified": "2023-03-06T18:40:43.162Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "json-query",
|
||||||
|
"custom": "json.rds.rdsLayers",
|
||||||
|
"action": "count",
|
||||||
|
"value": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "4eafe190-e59e-4a3e-af76-356f62fde842",
|
||||||
|
"colId": "history",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "https://oi-metrology-viewer-prod.mes.infineon.com/api/tooltypes",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/tooltypes",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 0,
|
||||||
|
"created": "2023-03-07T17:20:54.044Z",
|
||||||
|
"modified": "2023-03-07T17:20:54.044Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "280ea9be-50e3-4813-8eb0-ffff739fe196",
|
||||||
|
"colId": "history",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetHeaders",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/export/headers",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 0,
|
||||||
|
"created": "2023-03-07T17:21:05.219Z",
|
||||||
|
"modified": "2023-03-07T19:35:11.146Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4698\",\n \"RDS\": \"578824\",\n \"Reactor\": \"62\",\n \"ID\": 1678296039\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "6d8098aa-eb50-422e-b38d-32709d985e8e",
|
||||||
|
"colId": "history",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetHeaders-Dev",
|
||||||
|
"url": "http://mestsa008/api/export/headers",
|
||||||
|
"method": "POST",
|
||||||
|
"sortNum": 0,
|
||||||
|
"created": "2023-03-07T17:21:05.219Z",
|
||||||
|
"modified": "2023-03-08T18:18:04.054Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4698\",\n \"RDS\": \"578824\",\n \"Reactor\": \"62\",\n \"ID\": 1678296039\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "61383ad6-ceb4-4d98-86c1-bf00c0e4204d",
|
||||||
|
"colId": "history",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetHeaders-localhost",
|
||||||
|
"url": "http://localhost:5126/api/export/headers",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 0,
|
||||||
|
"created": "2023-03-07T17:21:05.219Z",
|
||||||
|
"modified": "2023-03-08T19:05:54.744Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4698\",\n \"RDS\": \"578824\",\n \"Reactor\": \"62\",\n \"ID\": -1678296039\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
}
|
||||||
|
]
|
30
.vscode/thunder-tests/thunderCollection.json
vendored
Normal file
30
.vscode/thunder-tests/thunderCollection.json
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"_id": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"colName": "InfinityQS EC Only",
|
||||||
|
"created": "2023-02-27T20:07:11.913Z",
|
||||||
|
"sortNum": 10000,
|
||||||
|
"folders": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "fb96b15a-0cc4-48c7-8767-34f1242750e8",
|
||||||
|
"colName": "Export EC",
|
||||||
|
"created": "2023-03-08T17:16:29.420Z",
|
||||||
|
"sortNum": 20000,
|
||||||
|
"folders": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "5bfd00bc-b58c-49d3-9f27-5acadd060a51",
|
||||||
|
"colName": "Export IFX",
|
||||||
|
"created": "2023-03-08T17:31:19.468Z",
|
||||||
|
"sortNum": 30000,
|
||||||
|
"folders": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "9ebfb84d-fa73-4c00-a2e0-e9ec69a31a16",
|
||||||
|
"colName": "LocalHost",
|
||||||
|
"created": "2023-05-08T19:34:00.425Z",
|
||||||
|
"sortNum": 40000,
|
||||||
|
"folders": []
|
||||||
|
}
|
||||||
|
]
|
1
.vscode/thunder-tests/thunderEnvironment.json
vendored
Normal file
1
.vscode/thunder-tests/thunderEnvironment.json
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
[]
|
440
.vscode/thunder-tests/thunderclient.json
vendored
Normal file
440
.vscode/thunder-tests/thunderclient.json
vendored
Normal file
@ -0,0 +1,440 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"_id": "acbbcc8d-3daf-43be-9081-f4be2f8a95b9",
|
||||||
|
"colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetCommandText",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQS/commandText/?sub_group_id=1677273357&process=61&job=CDE5&part=5012&lot=575908&date_time=2023-02-24 14:15:00",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 20000,
|
||||||
|
"created": "2023-02-27T20:07:11.921Z",
|
||||||
|
"modified": "2023-02-27T20:07:11.921Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [
|
||||||
|
{
|
||||||
|
"name": "sub_group_id",
|
||||||
|
"value": "1677273357",
|
||||||
|
"isPath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "process",
|
||||||
|
"value": "61",
|
||||||
|
"isPath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "job",
|
||||||
|
"value": "CDE5",
|
||||||
|
"isPath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "part",
|
||||||
|
"value": "5012",
|
||||||
|
"isPath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "lot",
|
||||||
|
"value": "575908",
|
||||||
|
"isPath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "date_time",
|
||||||
|
"value": "2023-02-24 14:15:00",
|
||||||
|
"isPath": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "Content-Length",
|
||||||
|
"custom": "",
|
||||||
|
"action": ">",
|
||||||
|
"value": "100"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "29e56599-0093-481e-9386-9e6c1bb828a8",
|
||||||
|
"colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetCommandTextV2",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV2/1677273357/commandText/?process=61&job=CDE5&part=5012&lot=575908&date_time=2023-02-24 14:15:00",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 30000,
|
||||||
|
"created": "2023-02-27T20:07:11.923Z",
|
||||||
|
"modified": "2023-02-27T20:07:11.923Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [
|
||||||
|
{
|
||||||
|
"name": "process",
|
||||||
|
"value": "61",
|
||||||
|
"isPath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "job",
|
||||||
|
"value": "CDE5",
|
||||||
|
"isPath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "part",
|
||||||
|
"value": "5012",
|
||||||
|
"isPath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "lot",
|
||||||
|
"value": "575908",
|
||||||
|
"isPath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "date_time",
|
||||||
|
"value": "2023-02-24 14:15:00",
|
||||||
|
"isPath": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "Content-Length",
|
||||||
|
"custom": "",
|
||||||
|
"action": ">",
|
||||||
|
"value": "100"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "2810520f-7a8b-4282-a593-92da3043e491",
|
||||||
|
"colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetData",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQS/1677273357/data",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 40000,
|
||||||
|
"created": "2023-02-27T20:07:11.924Z",
|
||||||
|
"modified": "2023-02-27T20:07:11.924Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "json-query",
|
||||||
|
"custom": "json.",
|
||||||
|
"action": "count",
|
||||||
|
"value": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "8628d1b1-cedb-45e3-9958-0ba4e233a2ac",
|
||||||
|
"colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetDataV2",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV2/1677273357/data",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 41250,
|
||||||
|
"created": "2023-02-27T20:07:11.925Z",
|
||||||
|
"modified": "2023-02-27T20:07:11.925Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "json-query",
|
||||||
|
"custom": "json.",
|
||||||
|
"action": "count",
|
||||||
|
"value": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "55c863ce-b828-4cdb-8a72-26da369c44ee",
|
||||||
|
"colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetDescriptors",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQS/1677273357/descriptors",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 41875,
|
||||||
|
"created": "2023-02-27T20:07:11.926Z",
|
||||||
|
"modified": "2023-02-27T20:07:11.926Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "json-query",
|
||||||
|
"custom": "json.",
|
||||||
|
"action": "count",
|
||||||
|
"value": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "b25fade2-44b5-4897-94a6-e31062c27e58",
|
||||||
|
"colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetDescriptorsV2",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV2/1677273357/descriptors",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 42187.5,
|
||||||
|
"created": "2023-02-27T20:07:11.927Z",
|
||||||
|
"modified": "2023-02-27T20:07:11.927Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "json-query",
|
||||||
|
"custom": "json.",
|
||||||
|
"action": "count",
|
||||||
|
"value": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "f24e826e-578c-45fe-a80a-ce31f0a13dfc",
|
||||||
|
"colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetEvents",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQS/1677273357/events",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 42500,
|
||||||
|
"created": "2023-02-27T20:07:11.928Z",
|
||||||
|
"modified": "2023-02-27T20:07:11.928Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "json-query",
|
||||||
|
"custom": "json.",
|
||||||
|
"action": "count",
|
||||||
|
"value": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "81118bd8-5919-4501-aa34-eaa2f4baeabf",
|
||||||
|
"colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetEventsV2",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV2/1677273357/events",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 43750,
|
||||||
|
"created": "2023-02-27T20:07:11.929Z",
|
||||||
|
"modified": "2023-02-27T20:07:11.929Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "json-query",
|
||||||
|
"custom": "json.",
|
||||||
|
"action": "count",
|
||||||
|
"value": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "26ded486-79ad-4fc8-b526-98187b8fde91",
|
||||||
|
"colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetHeader",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQS/1677273357/header",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 45000,
|
||||||
|
"created": "2023-02-27T20:07:11.930Z",
|
||||||
|
"modified": "2023-02-27T20:07:11.930Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "json-query",
|
||||||
|
"custom": "json.",
|
||||||
|
"action": "count",
|
||||||
|
"value": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "b8ee8160-6ca2-4276-be91-d1f6f2dd90dc",
|
||||||
|
"colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetHeaderV2",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV2/1677273357/header",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 55000,
|
||||||
|
"created": "2023-02-27T20:07:11.931Z",
|
||||||
|
"modified": "2023-02-27T20:07:11.931Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"type": "json-query",
|
||||||
|
"custom": "json.",
|
||||||
|
"action": "count",
|
||||||
|
"value": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "0aafd6ed-26a6-4a07-825c-8c1fee603b6a",
|
||||||
|
"colId": "fb96b15a-0cc4-48c7-8767-34f1242750e8",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetHeaders",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/export/headers",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 10000,
|
||||||
|
"created": "2023-03-08T17:16:56.561Z",
|
||||||
|
"modified": "2023-03-08T17:17:39.783Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4698\",\n \"RDS\": \"578824\",\n \"Reactor\": \"62\",\n \"ID\": 1678296039\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "af298148-482d-4822-80ba-1abb86e1f9c2",
|
||||||
|
"colId": "fb96b15a-0cc4-48c7-8767-34f1242750e8",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetExport",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/export/export",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 15000,
|
||||||
|
"created": "2023-03-08T17:17:47.597Z",
|
||||||
|
"modified": "2023-03-08T17:19:13.764Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4698\",\n \"RDS\": \"578824\",\n \"Reactor\": \"62\",\n \"ID\": 1678296039\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "a787c81d-381e-451d-9d96-e607f06efdaf",
|
||||||
|
"colId": "fb96b15a-0cc4-48c7-8767-34f1242750e8",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetLogistics",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/export/logistics",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 30000,
|
||||||
|
"created": "2023-03-08T17:18:38.179Z",
|
||||||
|
"modified": "2023-03-08T17:19:21.874Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4698\",\n \"RDS\": \"578824\",\n \"Reactor\": \"62\",\n \"ID\": 1678296039\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "7e19c7d4-2d93-46e1-88fd-ba5312885713",
|
||||||
|
"colId": "fb96b15a-0cc4-48c7-8767-34f1242750e8",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetProcessDataStandardFormat",
|
||||||
|
"url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/export/pdsf",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 40000,
|
||||||
|
"created": "2023-03-08T17:18:49.042Z",
|
||||||
|
"modified": "2023-03-08T17:19:27.119Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4698\",\n \"RDS\": \"578824\",\n \"Reactor\": \"62\",\n \"ID\": 1678296039\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "25eb571f-064c-4b3f-8c20-666c66c1b123",
|
||||||
|
"colId": "5bfd00bc-b58c-49d3-9f27-5acadd060a51",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetHeaders",
|
||||||
|
"url": "https://messa017.infineon.com/api/export/headers",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 10000,
|
||||||
|
"created": "2023-03-08T17:31:19.471Z",
|
||||||
|
"modified": "2023-04-07T15:10:34.584Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4830\",\n \"Reactor\": \"41\",\n \"RDS\": \"584740\",\n \"ID\": 1680657537,\n \"Path\": \"\\\\\\\\messdv002.na.infineon.com\\\\Candela\\\\Archive\\\\API\\\\2023_Week_14\\\\-4830\\\\-41\\\\-584740\\\\-1680657537\\\\638162291037289598.json\"\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "f5feb8e3-0e82-4b47-a15e-97ef069a1539",
|
||||||
|
"colId": "5bfd00bc-b58c-49d3-9f27-5acadd060a51",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetExport",
|
||||||
|
"url": "https://messa017.infineon.com/api/export/export",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 15000,
|
||||||
|
"created": "2023-03-08T17:31:19.472Z",
|
||||||
|
"modified": "2023-04-07T15:10:45.402Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4830\",\n \"Reactor\": \"41\",\n \"RDS\": \"584740\",\n \"ID\": 1680657537,\n \"Path\": \"\\\\\\\\messdv002.na.infineon.com\\\\Candela\\\\Archive\\\\API\\\\2023_Week_14\\\\-4830\\\\-41\\\\-584740\\\\-1680657537\\\\638162291037289598.json\"\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "7fddba99-14a2-4c6a-bf4a-4b94391929cf",
|
||||||
|
"colId": "5bfd00bc-b58c-49d3-9f27-5acadd060a51",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetLogistics",
|
||||||
|
"url": "https://messa017.infineon.com/api/export/logistics",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 30000,
|
||||||
|
"created": "2023-03-08T17:31:19.473Z",
|
||||||
|
"modified": "2023-04-07T15:10:49.000Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4830\",\n \"Reactor\": \"41\",\n \"RDS\": \"584740\",\n \"ID\": 1680657537,\n \"Path\": \"\\\\\\\\messdv002.na.infineon.com\\\\Candela\\\\Archive\\\\API\\\\2023_Week_14\\\\-4830\\\\-41\\\\-584740\\\\-1680657537\\\\638162291037289598.json\"\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "07d5b0c3-684a-4cad-8a48-b164e8da87b0",
|
||||||
|
"colId": "5bfd00bc-b58c-49d3-9f27-5acadd060a51",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "GetProcessDataStandardFormat",
|
||||||
|
"url": "https://messa017.infineon.com/api/export/pdsf",
|
||||||
|
"method": "GET",
|
||||||
|
"sortNum": 40000,
|
||||||
|
"created": "2023-03-08T17:31:19.474Z",
|
||||||
|
"modified": "2023-04-07T15:10:53.080Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"PSN\": \"4830\",\n \"Reactor\": \"41\",\n \"RDS\": \"584740\",\n \"ID\": 1680657537,\n \"Path\": \"\\\\\\\\messdv002.na.infineon.com\\\\Candela\\\\Archive\\\\API\\\\2023_Week_14\\\\-4830\\\\-41\\\\-584740\\\\-1680657537\\\\638162291037289598.json\"\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_id": "524e5261-69eb-4888-8818-608cde1ce506",
|
||||||
|
"colId": "9ebfb84d-fa73-4c00-a2e0-e9ec69a31a16",
|
||||||
|
"containerId": "",
|
||||||
|
"name": "Inbound-SRP",
|
||||||
|
"url": "http://localhost:5126/api/inbound/SRP",
|
||||||
|
"method": "POST",
|
||||||
|
"sortNum": 10000,
|
||||||
|
"created": "2023-05-08T19:34:14.843Z",
|
||||||
|
"modified": "2023-05-08T19:50:20.646Z",
|
||||||
|
"headers": [],
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "json",
|
||||||
|
"raw": "{\n \"SentToMetrology\": false,\n \"SentToSPC\": false,\n \"Id\": 0,\n \"Batch\": \"BIORAD#2\",\n \"Cassette\": \"BIORAD2\",\n \"CellName\": \"BIORAD2\",\n \"Date\": \"05/08/2023 12:23:23 AM\",\n \"FilePath\": \"\",\n \"Layer\": \"1\",\n \"MeanThickness\": \"21.8224\",\n \"Op\": \"C\",\n \"PSN\": \"5010\",\n \"PassFail\": \"PASS\",\n \"RDS\": \"588252\",\n \"RVThickness\": \"2.0559\",\n \"Reactor\": \"23\",\n \"Recipe\": \"PROD_8inch\",\n \"StdDev\": \"0.1483\",\n \"Title\": \"Bio-RadQS400MEPI\",\n \"UniqueId\": \"Bio-RadQS400MEPI_23-588252-5010.1_202305080023237034_5.4661928_Point-1\",\n \"Wafer\": \"23-588252-5010.1\",\n \"Zone\": \"-\",\n \"Details\": []\n}",
|
||||||
|
"form": []
|
||||||
|
},
|
||||||
|
"tests": []
|
||||||
|
}
|
||||||
|
]
|
243
Archive/.editorconfig
Normal file
243
Archive/.editorconfig
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
[*.cs]
|
||||||
|
csharp_indent_block_contents = true
|
||||||
|
csharp_indent_braces = false
|
||||||
|
csharp_indent_case_contents = true
|
||||||
|
csharp_indent_case_contents_when_block = true
|
||||||
|
csharp_indent_labels = one_less_than_current
|
||||||
|
csharp_indent_switch_labels = true
|
||||||
|
csharp_new_line_before_catch = true
|
||||||
|
csharp_new_line_before_else = true
|
||||||
|
csharp_new_line_before_finally = true
|
||||||
|
csharp_new_line_before_members_in_anonymous_types = true
|
||||||
|
csharp_new_line_before_members_in_object_initializers = true
|
||||||
|
csharp_new_line_before_open_brace = all
|
||||||
|
csharp_new_line_between_query_expression_clauses = true
|
||||||
|
csharp_prefer_braces = false
|
||||||
|
csharp_prefer_simple_default_expression = true:warning
|
||||||
|
csharp_prefer_simple_using_statement = true:warning
|
||||||
|
csharp_prefer_static_local_function = true:warning
|
||||||
|
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async
|
||||||
|
csharp_preserve_single_line_blocks = true
|
||||||
|
csharp_preserve_single_line_statements = false
|
||||||
|
csharp_space_after_cast = false
|
||||||
|
csharp_space_after_colon_in_inheritance_clause = true
|
||||||
|
csharp_space_after_comma = true
|
||||||
|
csharp_space_after_dot = false
|
||||||
|
csharp_space_after_keywords_in_control_flow_statements = true
|
||||||
|
csharp_space_after_semicolon_in_for_statement = true
|
||||||
|
csharp_space_around_binary_operators = before_and_after
|
||||||
|
csharp_space_around_declaration_statements = false
|
||||||
|
csharp_space_before_colon_in_inheritance_clause = true
|
||||||
|
csharp_space_before_comma = false
|
||||||
|
csharp_space_before_dot = false
|
||||||
|
csharp_space_before_open_square_brackets = false
|
||||||
|
csharp_space_before_semicolon_in_for_statement = false
|
||||||
|
csharp_space_between_empty_square_brackets = false
|
||||||
|
csharp_space_between_method_call_empty_parameter_list_parentheses = false
|
||||||
|
csharp_space_between_method_call_name_and_opening_parenthesis = false
|
||||||
|
csharp_space_between_method_call_parameter_list_parentheses = false
|
||||||
|
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
|
||||||
|
csharp_space_between_method_declaration_name_and_open_parenthesis = false
|
||||||
|
csharp_space_between_method_declaration_parameter_list_parentheses = false
|
||||||
|
csharp_space_between_parentheses = false
|
||||||
|
csharp_space_between_square_brackets = false
|
||||||
|
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true
|
||||||
|
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true
|
||||||
|
csharp_style_allow_embedded_statements_on_same_line_experimental = true
|
||||||
|
csharp_style_conditional_delegate_call = true
|
||||||
|
csharp_style_deconstructed_variable_declaration = false
|
||||||
|
csharp_style_expression_bodied_accessors = when_on_single_line:warning
|
||||||
|
csharp_style_expression_bodied_constructors = when_on_single_line:warning
|
||||||
|
csharp_style_expression_bodied_indexers = when_on_single_line:warning
|
||||||
|
csharp_style_expression_bodied_lambdas = when_on_single_line:warning
|
||||||
|
csharp_style_expression_bodied_local_functions = when_on_single_line:warning
|
||||||
|
csharp_style_expression_bodied_methods = when_on_single_line:warning
|
||||||
|
csharp_style_expression_bodied_operators = when_on_single_line:warning
|
||||||
|
csharp_style_expression_bodied_properties = when_on_single_line:warning
|
||||||
|
csharp_style_implicit_object_creation_when_type_is_apparent = true:warning
|
||||||
|
csharp_style_inlined_variable_declaration = false
|
||||||
|
csharp_style_namespace_declarations = file_scoped:warning
|
||||||
|
csharp_style_pattern_local_over_anonymous_function = true:warning
|
||||||
|
csharp_style_pattern_matching_over_as_with_null_check = true:warning
|
||||||
|
csharp_style_pattern_matching_over_is_with_cast_check = true:warning
|
||||||
|
csharp_style_prefer_index_operator = false:warning
|
||||||
|
csharp_style_prefer_not_pattern = true:warning
|
||||||
|
csharp_style_prefer_null_check_over_type_check = true
|
||||||
|
csharp_style_prefer_pattern_matching = true:warning
|
||||||
|
csharp_style_prefer_range_operator = false:warning
|
||||||
|
csharp_style_prefer_switch_expression = true:warning
|
||||||
|
csharp_style_throw_expression = true
|
||||||
|
csharp_style_unused_value_assignment_preference = discard_variable:warning
|
||||||
|
csharp_style_unused_value_expression_statement_preference = discard_variable:warning
|
||||||
|
csharp_style_var_elsewhere = false:warning
|
||||||
|
csharp_style_var_for_built_in_types = false:warning
|
||||||
|
csharp_style_var_when_type_is_apparent = false:warning
|
||||||
|
csharp_using_directive_placement = outside_namespace
|
||||||
|
dotnet_code_quality_unused_parameters = all
|
||||||
|
dotnet_code_quality_unused_parameters = non_public # IDE0060: Remove unused parameter
|
||||||
|
dotnet_code_quality.CAXXXX.api_surface = private, internal
|
||||||
|
dotnet_diagnostic.CA1825.severity = warning # CA1823: Avoid zero-length array allocations
|
||||||
|
dotnet_diagnostic.CA1829.severity = warning # CA1829: Use Length/Count property instead of Count() when available
|
||||||
|
dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
|
||||||
|
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
|
||||||
|
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
|
||||||
|
dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary
|
||||||
|
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
|
||||||
|
dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter
|
||||||
|
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method
|
||||||
|
dotnet_naming_rule.class_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.class_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.class_should_be_pascal_case.symbols = class
|
||||||
|
dotnet_naming_rule.delegate_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.delegate_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.delegate_should_be_pascal_case.symbols = delegate
|
||||||
|
dotnet_naming_rule.enum_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.enum_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.enum_should_be_pascal_case.symbols = enum
|
||||||
|
dotnet_naming_rule.event_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.event_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.event_should_be_pascal_case.symbols = event
|
||||||
|
dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning
|
||||||
|
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
|
||||||
|
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
|
||||||
|
dotnet_naming_rule.method_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.method_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.method_should_be_pascal_case.symbols = method
|
||||||
|
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
|
||||||
|
dotnet_naming_rule.private_method_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.private_method_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.private_method_should_be_pascal_case.symbols = private_method
|
||||||
|
dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.severity = warning
|
||||||
|
dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.style = private_of_internal_field
|
||||||
|
dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.symbols = private_or_internal_field
|
||||||
|
dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.severity = warning
|
||||||
|
dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.style = private_of_internal_field
|
||||||
|
dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.symbols = private_or_internal_static_field
|
||||||
|
dotnet_naming_rule.property_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.property_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.property_should_be_pascal_case.symbols = property
|
||||||
|
dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.severity = warning
|
||||||
|
dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.style = private_of_internal_field
|
||||||
|
dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.symbols = public_or_protected_field
|
||||||
|
dotnet_naming_rule.static_field_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.static_field_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.static_field_should_be_pascal_case.symbols = static_field
|
||||||
|
dotnet_naming_rule.static_method_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.static_method_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.static_method_should_be_pascal_case.symbols = static_method
|
||||||
|
dotnet_naming_rule.struct_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.struct_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.struct_should_be_pascal_case.symbols = struct
|
||||||
|
dotnet_naming_rule.types_should_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
|
||||||
|
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
|
||||||
|
dotnet_naming_style.begins_with_i.capitalization = pascal_case
|
||||||
|
dotnet_naming_style.begins_with_i.required_prefix = I
|
||||||
|
dotnet_naming_style.begins_with_i.required_suffix =
|
||||||
|
dotnet_naming_style.begins_with_i.word_separator =
|
||||||
|
dotnet_naming_style.pascal_case.capitalization = pascal_case
|
||||||
|
dotnet_naming_style.pascal_case.required_prefix =
|
||||||
|
dotnet_naming_style.pascal_case.required_suffix =
|
||||||
|
dotnet_naming_style.pascal_case.word_separator =
|
||||||
|
dotnet_naming_style.private_of_internal_field.capitalization = pascal_case
|
||||||
|
dotnet_naming_style.private_of_internal_field.required_prefix = _
|
||||||
|
dotnet_naming_style.private_of_internal_field.required_suffix =
|
||||||
|
dotnet_naming_style.private_of_internal_field.word_separator =
|
||||||
|
dotnet_naming_symbols.abstract_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.abstract_method.applicable_kinds = method
|
||||||
|
dotnet_naming_symbols.abstract_method.required_modifiers = abstract
|
||||||
|
dotnet_naming_symbols.class.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.class.applicable_kinds = class
|
||||||
|
dotnet_naming_symbols.class.required_modifiers =
|
||||||
|
dotnet_naming_symbols.delegate.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.delegate.applicable_kinds = delegate
|
||||||
|
dotnet_naming_symbols.delegate.required_modifiers =
|
||||||
|
dotnet_naming_symbols.enum.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.enum.applicable_kinds = enum
|
||||||
|
dotnet_naming_symbols.enum.required_modifiers =
|
||||||
|
dotnet_naming_symbols.event.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.event.applicable_kinds = event
|
||||||
|
dotnet_naming_symbols.event.required_modifiers =
|
||||||
|
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.interface.applicable_kinds = interface
|
||||||
|
dotnet_naming_symbols.interface.required_modifiers =
|
||||||
|
dotnet_naming_symbols.method.applicable_accessibilities = public
|
||||||
|
dotnet_naming_symbols.method.applicable_kinds = method
|
||||||
|
dotnet_naming_symbols.method.required_modifiers =
|
||||||
|
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
|
||||||
|
dotnet_naming_symbols.non_field_members.required_modifiers =
|
||||||
|
dotnet_naming_symbols.private_method.applicable_accessibilities = private
|
||||||
|
dotnet_naming_symbols.private_method.applicable_kinds = method
|
||||||
|
dotnet_naming_symbols.private_method.required_modifiers =
|
||||||
|
dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected
|
||||||
|
dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.private_or_internal_field.required_modifiers =
|
||||||
|
dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private, private_protected
|
||||||
|
dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = static
|
||||||
|
dotnet_naming_symbols.property.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.property.applicable_kinds = property
|
||||||
|
dotnet_naming_symbols.property.required_modifiers =
|
||||||
|
dotnet_naming_symbols.public_or_protected_field.applicable_accessibilities = public, protected
|
||||||
|
dotnet_naming_symbols.public_or_protected_field.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.public_or_protected_field.required_modifiers =
|
||||||
|
dotnet_naming_symbols.static_field.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.static_field.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.static_field.required_modifiers = static
|
||||||
|
dotnet_naming_symbols.static_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.static_method.applicable_kinds = method
|
||||||
|
dotnet_naming_symbols.static_method.required_modifiers = static
|
||||||
|
dotnet_naming_symbols.struct.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.struct.applicable_kinds = struct
|
||||||
|
dotnet_naming_symbols.struct.required_modifiers =
|
||||||
|
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
|
||||||
|
dotnet_naming_symbols.types.required_modifiers =
|
||||||
|
dotnet_remove_unnecessary_suppression_exclusions = 0
|
||||||
|
dotnet_separate_import_directive_groups = false
|
||||||
|
dotnet_sort_system_directives_first = false
|
||||||
|
dotnet_style_allow_multiple_blank_lines_experimental = false:warning
|
||||||
|
dotnet_style_allow_statement_immediately_after_block_experimental = true
|
||||||
|
dotnet_style_coalesce_expression = true
|
||||||
|
dotnet_style_collection_initializer = true:warning
|
||||||
|
dotnet_style_explicit_tuple_names = true:warning
|
||||||
|
dotnet_style_namespace_match_folder = true
|
||||||
|
dotnet_style_null_propagation = true:warning
|
||||||
|
dotnet_style_object_initializer = true:warning
|
||||||
|
dotnet_style_operator_placement_when_wrapping = beginning_of_line
|
||||||
|
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
|
||||||
|
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
|
||||||
|
dotnet_style_parentheses_in_other_operators = never_if_unnecessary
|
||||||
|
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity
|
||||||
|
dotnet_style_predefined_type_for_locals_parameters_members = true
|
||||||
|
dotnet_style_predefined_type_for_member_access = true
|
||||||
|
dotnet_style_prefer_auto_properties = true:warning
|
||||||
|
dotnet_style_prefer_compound_assignment = true:warning
|
||||||
|
dotnet_style_prefer_conditional_expression_over_assignment = false
|
||||||
|
dotnet_style_prefer_conditional_expression_over_return = false
|
||||||
|
dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning
|
||||||
|
dotnet_style_prefer_inferred_tuple_names = true:warning
|
||||||
|
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning
|
||||||
|
dotnet_style_prefer_simplified_boolean_expressions = true:warning
|
||||||
|
dotnet_style_prefer_simplified_interpolation = true
|
||||||
|
dotnet_style_qualification_for_event = false:error
|
||||||
|
dotnet_style_qualification_for_field = false
|
||||||
|
dotnet_style_qualification_for_method = false:error
|
||||||
|
dotnet_style_qualification_for_property = false:error
|
||||||
|
dotnet_style_readonly_field = true:warning
|
||||||
|
dotnet_style_require_accessibility_modifiers = for_non_interface_members
|
||||||
|
end_of_line = crlf
|
||||||
|
file_header_template = unset
|
||||||
|
indent_size = 4
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = false
|
||||||
|
root = true
|
||||||
|
tab_width = 4
|
||||||
|
# https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1822
|
||||||
|
# https://github.com/dotnet/aspnetcore/blob/main/.editorconfig
|
||||||
|
# https://github.com/dotnet/project-system/blob/main/.editorconfig
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using OI.Metrology.Shared.DataModels;
|
using OI.Metrology.Shared.DataModels;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.Services;
|
using OI.Metrology.Shared.Services;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -8,13 +8,13 @@ using System.IO;
|
|||||||
namespace OI.Metrology.Archive.ApiControllers;
|
namespace OI.Metrology.Archive.ApiControllers;
|
||||||
public class AttachmentsController : Controller
|
public class AttachmentsController : Controller
|
||||||
{
|
{
|
||||||
private readonly IMetrologyRepo _Repo;
|
|
||||||
private readonly IAttachmentsService _AttachmentsService;
|
private readonly IAttachmentsService _AttachmentsService;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
public AttachmentsController(IMetrologyRepo repo, IAttachmentsService attachmentsService)
|
public AttachmentsController(IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService)
|
||||||
{
|
{
|
||||||
_Repo = repo;
|
|
||||||
_AttachmentsService = attachmentsService;
|
_AttachmentsService = attachmentsService;
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
// this endpoint was created in hope that it would make retrieving attachments to display in OpenInsight easier
|
// this endpoint was created in hope that it would make retrieving attachments to display in OpenInsight easier
|
||||||
@ -27,7 +27,7 @@ public class AttachmentsController : Controller
|
|||||||
string title,
|
string title,
|
||||||
string filename)
|
string filename)
|
||||||
{
|
{
|
||||||
ToolType tt = _Repo.GetToolTypeByName(toolTypeName);
|
ToolType tt = _MetrologyRepository.GetToolTypeByName(toolTypeName);
|
||||||
|
|
||||||
bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
|
bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace OI.Metrology.Archive.ApiContollers;
|
namespace OI.Metrology.Archive.ApiControllers;
|
||||||
|
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
|
||||||
// this controller is for the Awaiting Dispo functionality
|
// this controller is for the Awaiting Dispo functionality
|
||||||
|
|
||||||
public class AwaitingDispoController : Controller
|
public class AwaitingDispoController : Controller
|
||||||
{
|
{
|
||||||
private readonly IMetrologyRepo _Repo;
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
public AwaitingDispoController(IMetrologyRepo repo) => _Repo = repo;
|
public AwaitingDispoController(IMetrologyRepository metrologyRepository) => _MetrologyRepository = metrologyRepository;
|
||||||
|
|
||||||
// returns the data to show in the Awaiting Dispo grid
|
// returns the data to show in the Awaiting Dispo grid
|
||||||
// marked no-cache, just-in-case since igniteUI automatically adds a query string parameter to prevent caching
|
// marked no-cache, just-in-case since igniteUI automatically adds a query string parameter to prevent caching
|
||||||
@ -21,7 +21,7 @@ public class AwaitingDispoController : Controller
|
|||||||
{
|
{
|
||||||
var r = new
|
var r = new
|
||||||
{
|
{
|
||||||
Results = _Repo.GetAwaitingDispo()
|
Results = _MetrologyRepository.GetAwaitingDisposition()
|
||||||
};
|
};
|
||||||
return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ public class AwaitingDispoController : Controller
|
|||||||
[HttpPost("/api/awaitingdispo/markasreviewed")]
|
[HttpPost("/api/awaitingdispo/markasreviewed")]
|
||||||
public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid)
|
public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid)
|
||||||
{
|
{
|
||||||
_ = _Repo.UpdateReviewDate(tooltypeid, headerid, false);
|
_ = _MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, false);
|
||||||
return Ok();
|
return Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ public class AwaitingDispoController : Controller
|
|||||||
[HttpPost("/api/awaitingdispo/markasawaiting")]
|
[HttpPost("/api/awaitingdispo/markasawaiting")]
|
||||||
public IActionResult MarkAsAwaiting([FromQuery] long headerid, [FromQuery] int tooltypeid)
|
public IActionResult MarkAsAwaiting([FromQuery] long headerid, [FromQuery] int tooltypeid)
|
||||||
{
|
{
|
||||||
if (_Repo.UpdateReviewDate(tooltypeid, headerid, true) <= 1)
|
if (_MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, true) <= 1)
|
||||||
return Ok();
|
return Ok();
|
||||||
else
|
else
|
||||||
return StatusCode(444);
|
return StatusCode(444);
|
||||||
|
@ -4,30 +4,30 @@ using Microsoft.Extensions.Logging;
|
|||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using OI.Metrology.Archive.Models;
|
using OI.Metrology.Archive.Models;
|
||||||
using OI.Metrology.Shared.DataModels;
|
using OI.Metrology.Shared.DataModels;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.Services;
|
using OI.Metrology.Shared.Services;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace OI.Metrology.Archive.ApiContollers;
|
namespace OI.Metrology.Archive.ApiControllers;
|
||||||
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class InboundController : ControllerBase
|
public class InboundController : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly ILogger _Logger;
|
private readonly ILogger _Logger;
|
||||||
private readonly IMetrologyRepo _Repo;
|
|
||||||
private readonly AppSettings _AppSettings;
|
private readonly AppSettings _AppSettings;
|
||||||
private readonly IAttachmentsService _AttachmentService;
|
private readonly IAttachmentsService _AttachmentService;
|
||||||
private readonly IInboundDataService _InboundDataService;
|
private readonly IInboundDataService _InboundDataService;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
public InboundController(AppSettings appSettings, ILogger<InboundController> logger, IMetrologyRepo repo, IInboundDataService inboundDataService, IAttachmentsService attachmentService)
|
public InboundController(AppSettings appSettings, ILogger<InboundController> logger, IMetrologyRepository metrologyRepository, IInboundDataService inboundDataService, IAttachmentsService attachmentService)
|
||||||
{
|
{
|
||||||
_Repo = repo;
|
|
||||||
_Logger = logger;
|
_Logger = logger;
|
||||||
_AppSettings = appSettings;
|
_AppSettings = appSettings;
|
||||||
_AttachmentService = attachmentService;
|
_AttachmentService = attachmentService;
|
||||||
_InboundDataService = inboundDataService;
|
_InboundDataService = inboundDataService;
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
// this class represents the API response back to the client
|
// this class represents the API response back to the client
|
||||||
@ -35,8 +35,8 @@ public class InboundController : ControllerBase
|
|||||||
{
|
{
|
||||||
public bool Success { get; set; }
|
public bool Success { get; set; }
|
||||||
public long HeaderID { get; set; }
|
public long HeaderID { get; set; }
|
||||||
public List<string> Errors { get; set; }
|
public List<string>? Errors { get; set; }
|
||||||
public List<string> Warnings { get; set; }
|
public List<string>? Warnings { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is the main endpoint, it accepts a JSON message that contains both the header and data records together
|
// this is the main endpoint, it accepts a JSON message that contains both the header and data records together
|
||||||
@ -61,9 +61,9 @@ public class InboundController : ControllerBase
|
|||||||
return Unauthorized(r);
|
return Unauthorized(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolType toolType = _Repo.GetToolTypeByName(tooltype);
|
ToolType toolType = _MetrologyRepository.GetToolTypeByName(tooltype);
|
||||||
|
|
||||||
if (toolType == null)
|
if (toolType is null)
|
||||||
{
|
{
|
||||||
r.Errors.Add("Invalid tool type: " + tooltype);
|
r.Errors.Add("Invalid tool type: " + tooltype);
|
||||||
return BadRequest(r);
|
return BadRequest(r);
|
||||||
@ -71,9 +71,9 @@ public class InboundController : ControllerBase
|
|||||||
|
|
||||||
// get metadata
|
// get metadata
|
||||||
|
|
||||||
List<ToolTypeMetadata> metaData = _Repo.GetToolTypeMetadataByToolTypeID(toolType.ID).ToList();
|
List<ToolTypeMetadata> metaData = _MetrologyRepository.GetToolTypeMetadataByToolTypeID(toolType.ID).ToList();
|
||||||
|
|
||||||
if (metaData == null)
|
if (metaData is null)
|
||||||
{
|
{
|
||||||
r.Errors.Add("Invalid metadata for tool type: " + tooltype);
|
r.Errors.Add("Invalid metadata for tool type: " + tooltype);
|
||||||
return BadRequest(r);
|
return BadRequest(r);
|
||||||
@ -81,12 +81,12 @@ public class InboundController : ControllerBase
|
|||||||
|
|
||||||
// validate fields
|
// validate fields
|
||||||
|
|
||||||
if (jsonbody != null)
|
if (jsonbody is not null)
|
||||||
_InboundDataService.ValidateJSONFields(jsonbody, 0, metaData, r.Errors, r.Warnings);
|
_InboundDataService.ValidateJSONFields(jsonbody, 0, metaData, r.Errors, r.Warnings);
|
||||||
else
|
else
|
||||||
r.Errors.Add("Invalid json");
|
r.Errors.Add("Invalid json");
|
||||||
|
|
||||||
if (r.Errors.Count == 0)
|
if (r.Errors.Count == 0 && jsonbody is not null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -118,12 +118,12 @@ public class InboundController : ControllerBase
|
|||||||
return Unauthorized("Remote IP is not on allowed list");
|
return Unauthorized("Remote IP is not on allowed list");
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolType toolType = _Repo.GetToolTypeByName(tooltype);
|
ToolType toolType = _MetrologyRepository.GetToolTypeByName(tooltype);
|
||||||
|
|
||||||
if (toolType == null)
|
if (toolType is null)
|
||||||
return BadRequest($"Invalid tool type: {tooltype}");
|
return BadRequest($"Invalid tool type: {tooltype}");
|
||||||
|
|
||||||
if (Request.Form == null)
|
if (Request.Form is null)
|
||||||
return BadRequest($"Invalid form");
|
return BadRequest($"Invalid form");
|
||||||
|
|
||||||
if (Request.Form.Files.Count != 1)
|
if (Request.Form.Files.Count != 1)
|
||||||
@ -147,14 +147,14 @@ public class InboundController : ControllerBase
|
|||||||
if (string.IsNullOrWhiteSpace(_AppSettings.InboundApiAllowedIPList))
|
if (string.IsNullOrWhiteSpace(_AppSettings.InboundApiAllowedIPList))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
System.Net.IPAddress remoteIP = HttpContext.Connection.RemoteIpAddress;
|
System.Net.IPAddress? remoteIP = HttpContext.Connection.RemoteIpAddress;
|
||||||
byte[] remoteIPBytes = remoteIP.GetAddressBytes();
|
byte[]? remoteIPBytes = remoteIP?.GetAddressBytes();
|
||||||
|
|
||||||
string[] allowedIPs = _AppSettings.InboundApiAllowedIPList.Split(';');
|
string[] allowedIPs = _AppSettings.InboundApiAllowedIPList.Split(';');
|
||||||
foreach (string ip in allowedIPs)
|
foreach (string ip in allowedIPs)
|
||||||
{
|
{
|
||||||
System.Net.IPAddress parsedIP;
|
System.Net.IPAddress? parsedIP;
|
||||||
if (System.Net.IPAddress.TryParse(ip, out parsedIP))
|
if (remoteIPBytes is not null && System.Net.IPAddress.TryParse(ip, out parsedIP))
|
||||||
{
|
{
|
||||||
if (parsedIP.GetAddressBytes().SequenceEqual(remoteIPBytes))
|
if (parsedIP.GetAddressBytes().SequenceEqual(remoteIPBytes))
|
||||||
return true;
|
return true;
|
||||||
|
@ -4,11 +4,11 @@ using System;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace OI.Metrology.Archive.ApiContollers;
|
namespace OI.Metrology.Archive.ApiControllers;
|
||||||
|
|
||||||
using OI.Metrology.Archive.Models;
|
using OI.Metrology.Archive.Models;
|
||||||
using OI.Metrology.Shared.DataModels;
|
using OI.Metrology.Shared.DataModels;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.Services;
|
using OI.Metrology.Shared.Services;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
@ -21,15 +21,15 @@ public class ToolTypesController : Controller
|
|||||||
// it is named after the /api/tooltypes prefix
|
// it is named after the /api/tooltypes prefix
|
||||||
// the URL pattern is RESTful and the tool type is the root of every request
|
// the URL pattern is RESTful and the tool type is the root of every request
|
||||||
|
|
||||||
private readonly IMetrologyRepo _Repo;
|
|
||||||
private readonly AppSettings _AppSettings;
|
private readonly AppSettings _AppSettings;
|
||||||
private readonly IAttachmentsService _AttachmentsService;
|
private readonly IAttachmentsService _AttachmentsService;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
public ToolTypesController(AppSettings appSettings, IMetrologyRepo repo, IAttachmentsService attachmentsService)
|
public ToolTypesController(AppSettings appSettings, IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService)
|
||||||
{
|
{
|
||||||
_Repo = repo;
|
|
||||||
_AppSettings = appSettings;
|
_AppSettings = appSettings;
|
||||||
_AttachmentsService = attachmentsService;
|
_AttachmentsService = attachmentsService;
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a list of tooltypes, returns just Name and ID
|
// Get a list of tooltypes, returns just Name and ID
|
||||||
@ -38,7 +38,7 @@ public class ToolTypesController : Controller
|
|||||||
{
|
{
|
||||||
var r = new
|
var r = new
|
||||||
{
|
{
|
||||||
Results = _Repo.GetToolTypes().Select(tt => new { tt.ToolTypeName, tt.ID })
|
Results = _MetrologyRepository.GetToolTypes().Select(tt => new { tt.ToolTypeName, tt.ID })
|
||||||
};
|
};
|
||||||
return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
}
|
}
|
||||||
@ -48,8 +48,8 @@ public class ToolTypesController : Controller
|
|||||||
[HttpGet("/api/tooltypes/{id}")]
|
[HttpGet("/api/tooltypes/{id}")]
|
||||||
public IActionResult GetToolTypeMetadata(int id, string sortby = "")
|
public IActionResult GetToolTypeMetadata(int id, string sortby = "")
|
||||||
{
|
{
|
||||||
ToolType tt = _Repo.GetToolTypeByID(id);
|
ToolType tt = _MetrologyRepository.GetToolTypeByID(id);
|
||||||
IEnumerable<ToolTypeMetadata> md = _Repo.GetToolTypeMetadataByToolTypeID(id);
|
IEnumerable<ToolTypeMetadata> md = _MetrologyRepository.GetToolTypeMetadataByToolTypeID(id);
|
||||||
|
|
||||||
if (string.Equals(sortby, "grid", StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(sortby, "grid", StringComparison.OrdinalIgnoreCase))
|
||||||
md = md.OrderBy(f => f.GridDisplayOrder).ToList();
|
md = md.OrderBy(f => f.GridDisplayOrder).ToList();
|
||||||
@ -80,7 +80,7 @@ public class ToolTypesController : Controller
|
|||||||
{
|
{
|
||||||
long totalRecs;
|
long totalRecs;
|
||||||
|
|
||||||
System.Data.DataTable dt = _Repo.GetHeaders(id, datebegin, dateend, page, pagesize, headerid, out totalRecs);
|
System.Data.DataTable dt = _MetrologyRepository.GetHeaders(id, datebegin, dateend, page, pagesize, headerid, out totalRecs);
|
||||||
|
|
||||||
var r = new
|
var r = new
|
||||||
{
|
{
|
||||||
@ -101,7 +101,7 @@ public class ToolTypesController : Controller
|
|||||||
{
|
{
|
||||||
long totalRecs;
|
long totalRecs;
|
||||||
|
|
||||||
IEnumerable<HeaderCommon> dt = _Repo.GetHeaderTitles(id, page, pagesize, out totalRecs);
|
IEnumerable<HeaderCommon> dt = _MetrologyRepository.GetHeaderTitles(id, page, pagesize, out totalRecs);
|
||||||
|
|
||||||
var r = new
|
var r = new
|
||||||
{
|
{
|
||||||
@ -121,7 +121,7 @@ public class ToolTypesController : Controller
|
|||||||
{
|
{
|
||||||
var r = new
|
var r = new
|
||||||
{
|
{
|
||||||
Results = _Repo.GetHeaderFields(id, headerid).Select(x => new { Column = x.Key, x.Value }).ToList()
|
Results = _MetrologyRepository.GetHeaderFields(id, headerid).Select(x => new { Column = x.Key, x.Value }).ToList()
|
||||||
};
|
};
|
||||||
string json = JsonConvert.SerializeObject(r);
|
string json = JsonConvert.SerializeObject(r);
|
||||||
|
|
||||||
@ -137,7 +137,7 @@ public class ToolTypesController : Controller
|
|||||||
|
|
||||||
var r = new
|
var r = new
|
||||||
{
|
{
|
||||||
Results = _Repo.GetDataSharePoint(id, title)
|
Results = _MetrologyRepository.GetDataSharePoint(id, title)
|
||||||
};
|
};
|
||||||
string json = JsonConvert.SerializeObject(r);
|
string json = JsonConvert.SerializeObject(r);
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ public class ToolTypesController : Controller
|
|||||||
|
|
||||||
var r = new
|
var r = new
|
||||||
{
|
{
|
||||||
Results = _Repo.GetData(id, headerid)
|
Results = _MetrologyRepository.GetData(id, headerid)
|
||||||
};
|
};
|
||||||
string json = JsonConvert.SerializeObject(r);
|
string json = JsonConvert.SerializeObject(r);
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ public class ToolTypesController : Controller
|
|||||||
string filename)
|
string filename)
|
||||||
{
|
{
|
||||||
|
|
||||||
ToolType tt = _Repo.GetToolTypeByID(toolTypeId);
|
ToolType tt = _MetrologyRepository.GetToolTypeByID(toolTypeId);
|
||||||
|
|
||||||
bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
|
bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ public class ToolTypesController : Controller
|
|||||||
public IActionResult OIExport(int toolTypeId, long headerid)
|
public IActionResult OIExport(int toolTypeId, long headerid)
|
||||||
{
|
{
|
||||||
// Call the export stored procedure
|
// Call the export stored procedure
|
||||||
System.Data.DataSet ds = _Repo.GetOIExportData(toolTypeId, headerid);
|
System.Data.DataSet ds = _MetrologyRepository.GetOIExportData(toolTypeId, headerid);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -203,7 +203,7 @@ public class ToolTypesController : Controller
|
|||||||
if (ds.Tables[0].Rows.Count != 1)
|
if (ds.Tables[0].Rows.Count != 1)
|
||||||
throw new Exception("Error exporting, invalid filename");
|
throw new Exception("Error exporting, invalid filename");
|
||||||
|
|
||||||
string filename = Convert.ToString(ds.Tables[0].Rows[0][0]);
|
string? filename = Convert.ToString(ds.Tables[0].Rows[0][0]);
|
||||||
|
|
||||||
// The second table has the header data
|
// The second table has the header data
|
||||||
if (ds.Tables[1].Rows.Count != 1)
|
if (ds.Tables[1].Rows.Count != 1)
|
||||||
@ -211,9 +211,9 @@ public class ToolTypesController : Controller
|
|||||||
|
|
||||||
System.Text.StringBuilder sb = new();
|
System.Text.StringBuilder sb = new();
|
||||||
|
|
||||||
foreach (object o in ds.Tables[1].Rows[0].ItemArray)
|
foreach (object? o in ds.Tables[1].Rows[0].ItemArray)
|
||||||
{
|
{
|
||||||
if ((o != null) && (!Convert.IsDBNull(o)))
|
if ((o is not null) && (!Convert.IsDBNull(o)))
|
||||||
_ = sb.Append(Convert.ToString(o));
|
_ = sb.Append(Convert.ToString(o));
|
||||||
_ = sb.Append('\t');
|
_ = sb.Append('\t');
|
||||||
}
|
}
|
||||||
@ -221,9 +221,9 @@ public class ToolTypesController : Controller
|
|||||||
// The third table has the detail data
|
// The third table has the detail data
|
||||||
foreach (System.Data.DataRow dr in ds.Tables[2].Rows)
|
foreach (System.Data.DataRow dr in ds.Tables[2].Rows)
|
||||||
{
|
{
|
||||||
foreach (object o in dr.ItemArray)
|
foreach (object? o in dr.ItemArray)
|
||||||
{
|
{
|
||||||
if ((o != null) && (!Convert.IsDBNull(o)))
|
if ((o is not null) && (!Convert.IsDBNull(o)))
|
||||||
_ = sb.Append(Convert.ToString(o));
|
_ = sb.Append(Convert.ToString(o));
|
||||||
_ = sb.Append('\t');
|
_ = sb.Append('\t');
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,8 @@ public class ApiLoggingMiddleware
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// if there are content type filters configured, only log is the request begins with one of them
|
// if there are content type filters configured, only log is the request begins with one of them
|
||||||
doLogging = _AppSettings.ApiLoggingContentTypes.Split(';').Any(ct => httpContext.Request.ContentType.StartsWith(ct));
|
string? contentType = httpContext.Request.ContentType;
|
||||||
|
doLogging = contentType is not null && _AppSettings.ApiLoggingContentTypes.Split(';').Any(ct => contentType.StartsWith(ct));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,8 @@ public class ErrorHandlerController : Controller
|
|||||||
|
|
||||||
public IActionResult Index()
|
public IActionResult Index()
|
||||||
{
|
{
|
||||||
IExceptionHandlerFeature error = HttpContext.Features.Get<IExceptionHandlerFeature>();
|
IExceptionHandlerFeature? error = HttpContext.Features.Get<IExceptionHandlerFeature>();
|
||||||
if (error == null)
|
if (error is null)
|
||||||
{
|
{
|
||||||
return Redirect("~/");
|
return Redirect("~/");
|
||||||
}
|
}
|
||||||
@ -24,7 +24,7 @@ public class ErrorHandlerController : Controller
|
|||||||
_Logger.LogError("Unhandled exception: " + error.Error.ToString());
|
_Logger.LogError("Unhandled exception: " + error.Error.ToString());
|
||||||
dynamic r = new
|
dynamic r = new
|
||||||
{
|
{
|
||||||
Message = error.Error == null ? "Error" : error.Error.Message
|
Message = error.Error is null ? "Error" : error.Error.Message
|
||||||
};
|
};
|
||||||
return StatusCode(StatusCodes.Status500InternalServerError, r);
|
return StatusCode(StatusCodes.Status500InternalServerError, r);
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Mvc.Filters;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using OI.Metrology.Archive.Models;
|
using OI.Metrology.Archive.Models;
|
||||||
using OI.Metrology.Shared.DataModels;
|
using OI.Metrology.Shared.DataModels;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.ViewModels;
|
using OI.Metrology.Shared.ViewModels;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -17,14 +17,14 @@ public class ExportController : Controller
|
|||||||
{
|
{
|
||||||
private readonly ILogger _Logger;
|
private readonly ILogger _Logger;
|
||||||
private readonly bool _IsTestDatabase;
|
private readonly bool _IsTestDatabase;
|
||||||
private readonly IMetrologyRepo _Repo;
|
|
||||||
private readonly AppSettings _AppSettings;
|
private readonly AppSettings _AppSettings;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
public ExportController(AppSettings appSettings, ILogger<ExportController> logger, IMetrologyRepo repo)
|
public ExportController(AppSettings appSettings, ILogger<ExportController> logger, IMetrologyRepository metrologyRepository)
|
||||||
{
|
{
|
||||||
_Repo = repo;
|
|
||||||
_Logger = logger;
|
_Logger = logger;
|
||||||
_AppSettings = appSettings;
|
_AppSettings = appSettings;
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
_IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
|
_IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +40,6 @@ public class ExportController : Controller
|
|||||||
{
|
{
|
||||||
Export model = new()
|
Export model = new()
|
||||||
{
|
{
|
||||||
ToolType = "",
|
|
||||||
StartTime = DateTime.Now.AddMonths(-1),
|
StartTime = DateTime.Now.AddMonths(-1),
|
||||||
EndTime = DateTime.Now
|
EndTime = DateTime.Now
|
||||||
};
|
};
|
||||||
@ -53,21 +52,21 @@ public class ExportController : Controller
|
|||||||
[Route("/ExportData")]
|
[Route("/ExportData")]
|
||||||
public ActionResult ExportData(Export model)
|
public ActionResult ExportData(Export model)
|
||||||
{
|
{
|
||||||
ToolType toolType = null;
|
ToolType? toolType = null;
|
||||||
if (string.IsNullOrEmpty(model.ToolType))
|
if (string.IsNullOrEmpty(model.ToolType))
|
||||||
ModelState.AddModelError("Exception", "Invalid selection");
|
ModelState.AddModelError("Exception", "Invalid selection");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (model.StartTime > model.EndTime)
|
if (model.StartTime > model.EndTime)
|
||||||
ModelState.AddModelError("EndTime", "End time must be after start time");
|
ModelState.AddModelError("EndTime", "End time must be after start time");
|
||||||
IEnumerable<ToolType> toolTypes = _Repo.GetToolTypes();
|
IEnumerable<ToolType> toolTypes = _MetrologyRepository.GetToolTypes();
|
||||||
toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault();
|
toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault();
|
||||||
if (toolType is null)
|
if (toolType is null)
|
||||||
ModelState.AddModelError("ToolType", "Invalid selection");
|
ModelState.AddModelError("ToolType", "Invalid selection");
|
||||||
else if (string.IsNullOrWhiteSpace(toolType.ExportSPName))
|
else if (string.IsNullOrWhiteSpace(toolType.ExportSPName))
|
||||||
ModelState.AddModelError("ToolType", "Tool type is not exportable");
|
ModelState.AddModelError("ToolType", "Tool type is not exportable");
|
||||||
}
|
}
|
||||||
if (ModelState.IsValid)
|
if (ModelState.IsValid && toolType?.ToolTypeName is not null && toolType.ExportSPName is not null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -94,7 +93,7 @@ public class ExportController : Controller
|
|||||||
string fileName = string.Format("Export_{0}_{1:yyyyMMddHHmm}_to_{2:yyyyMMddHHmm}.csv", toolTypeName, startTime, endTime);
|
string fileName = string.Format("Export_{0}_{1:yyyyMMddHHmm}_to_{2:yyyyMMddHHmm}.csv", toolTypeName, startTime, endTime);
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
System.Data.DataTable dt = _Repo.ExportData(spName, startTime, endTime);
|
System.Data.DataTable dt = _MetrologyRepository.ExportData(spName, startTime, endTime);
|
||||||
|
|
||||||
_ = sb.AppendLine(GetColumnHeaders(dt));
|
_ = sb.AppendLine(GetColumnHeaders(dt));
|
||||||
|
|
||||||
@ -115,10 +114,13 @@ public class ExportController : Controller
|
|||||||
{
|
{
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
_ = r.Append(',');
|
_ = r.Append(',');
|
||||||
|
|
||||||
object v = dr[i];
|
object v = dr[i];
|
||||||
if (!Convert.IsDBNull(v))
|
if (!Convert.IsDBNull(v))
|
||||||
_ = r.Append(FormatForCSV(Convert.ToString(v)));
|
{
|
||||||
|
string? c = Convert.ToString(v);
|
||||||
|
if (c is not null)
|
||||||
|
_ = r.Append(FormatForCSV(c));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return r.ToString();
|
return r.ToString();
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Filters;
|
using Microsoft.AspNetCore.Mvc.Filters;
|
||||||
using OI.Metrology.Archive.Models;
|
using OI.Metrology.Archive.Models;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Repositories;
|
||||||
using OI.Metrology.Shared.ViewModels;
|
using OI.Metrology.Shared.ViewModels;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using IO = System.IO;
|
|
||||||
|
|
||||||
namespace OI.Metrology.Archive.Controllers;
|
namespace OI.Metrology.Archive.Controllers;
|
||||||
|
|
||||||
@ -13,12 +13,12 @@ public class PagesController : Controller
|
|||||||
{
|
{
|
||||||
private readonly bool _IsTestDatabase;
|
private readonly bool _IsTestDatabase;
|
||||||
private readonly IRdsMaxRepo _RdsMaxRepo;
|
private readonly IRdsMaxRepo _RdsMaxRepo;
|
||||||
private readonly IMetrologyRepo _MetrologyRepo;
|
private readonly IMetrologyRepository _MetrologyRepo;
|
||||||
|
|
||||||
public PagesController(AppSettings appSettings, IMetrologyRepo metrologyRepo, IRdsMaxRepo rdsMaxRepo)
|
public PagesController(AppSettings appSettings, IMetrologyRepository metrologyRepository, IRdsMaxRepo rdsMaxRepo)
|
||||||
{
|
{
|
||||||
_RdsMaxRepo = rdsMaxRepo;
|
_RdsMaxRepo = rdsMaxRepo;
|
||||||
_MetrologyRepo = metrologyRepo;
|
_MetrologyRepo = metrologyRepository;
|
||||||
_IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
|
_IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,50 +68,6 @@ public class PagesController : Controller
|
|||||||
public IActionResult Crash() =>
|
public IActionResult Crash() =>
|
||||||
throw new Exception("Test unhandled exception");
|
throw new Exception("Test unhandled exception");
|
||||||
|
|
||||||
[HttpGet]
|
|
||||||
[Route("/Step1")]
|
|
||||||
[Route("/Metrology/Step1")]
|
|
||||||
public IActionResult Step1(string mod = "", string equipment = "", string layer = "", string zone = "", string rds = "", string initials = "")
|
|
||||||
{
|
|
||||||
string directory = "D:/Tmp/Metrology";
|
|
||||||
if (!IO.Directory.Exists(directory))
|
|
||||||
_ = IO.Directory.CreateDirectory(directory);
|
|
||||||
string[] model = new string[] { mod, equipment, layer, zone, rds, initials };
|
|
||||||
if (!string.IsNullOrEmpty(initials))
|
|
||||||
IO.File.WriteAllLines(IO.Path.Combine(directory, $"{DateTime.Now.Ticks}-{initials}.rsv"), model);
|
|
||||||
return View(model);
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpGet]
|
|
||||||
[Route("/Step2")]
|
|
||||||
[Route("/Metrology/Step2")]
|
|
||||||
public IActionResult Step2(string mod) =>
|
|
||||||
View(new string[] { mod });
|
|
||||||
|
|
||||||
[HttpGet]
|
|
||||||
[Route("/Step3")]
|
|
||||||
[Route("/Metrology/Step3")]
|
|
||||||
public IActionResult Step3(string mod, string equipment) =>
|
|
||||||
View(new string[] { mod, equipment });
|
|
||||||
|
|
||||||
[HttpGet]
|
|
||||||
[Route("/Step4")]
|
|
||||||
[Route("/Metrology/Step4")]
|
|
||||||
public IActionResult Step4(string mod, string equipment, string layer) =>
|
|
||||||
View(new string[] { mod, equipment, layer });
|
|
||||||
|
|
||||||
[HttpGet]
|
|
||||||
[Route("/Step5")]
|
|
||||||
[Route("/Metrology/Step5")]
|
|
||||||
public IActionResult Step5(string mod, string equipment, string layer, string zone) =>
|
|
||||||
View(new string[] { mod, equipment, layer, zone });
|
|
||||||
|
|
||||||
[HttpGet]
|
|
||||||
[Route("/Step6")]
|
|
||||||
[Route("/Metrology/Step6")]
|
|
||||||
public IActionResult Step6(string mod, string equipment, string layer, string zone, string rds) =>
|
|
||||||
View(new string[] { mod, equipment, layer, zone, rds });
|
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/RdsMax")]
|
[Route("/RdsMax")]
|
||||||
[Route("/Metrology/RdsMax")]
|
[Route("/Metrology/RdsMax")]
|
||||||
|
@ -1,61 +1,24 @@
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
|
|
||||||
namespace OI.Metrology.Archive.Models;
|
namespace OI.Metrology.Archive.Models;
|
||||||
|
|
||||||
public class AppSettings
|
public record AppSettings(string ApiLoggingContentTypes,
|
||||||
|
string ApiLoggingPathPrefixes,
|
||||||
|
string ApiLogPath,
|
||||||
|
string AttachmentPath,
|
||||||
|
string BuildNumber,
|
||||||
|
string Company,
|
||||||
|
string ConnectionString,
|
||||||
|
string GitCommitSeven,
|
||||||
|
string InboundApiAllowedIPList,
|
||||||
|
string MonAResource,
|
||||||
|
string MonASite,
|
||||||
|
string Oi2SqlConnectionString,
|
||||||
|
string OIExportPath,
|
||||||
|
string URLs,
|
||||||
|
string WorkingDirectoryName)
|
||||||
{
|
{
|
||||||
|
|
||||||
public string ApiLoggingContentTypes { init; get; }
|
|
||||||
public string ApiLoggingPathPrefixes { init; get; }
|
|
||||||
public string ApiLogPath { init; get; }
|
|
||||||
public string AttachmentPath { init; get; }
|
|
||||||
public string BuildNumber { init; get; }
|
|
||||||
public string Company { init; get; }
|
|
||||||
public string ConnectionString { init; get; }
|
|
||||||
public string GitCommitSeven { init; get; }
|
|
||||||
public string InboundApiAllowedIPList { init; get; }
|
|
||||||
public string MonAResource { init; get; }
|
|
||||||
public string MonASite { init; get; }
|
|
||||||
public string OIExportPath { init; get; }
|
|
||||||
public string Oi2SqlConnectionString { init; get; }
|
|
||||||
public string URLs { init; get; }
|
|
||||||
public string WorkingDirectoryName { init; get; }
|
|
||||||
|
|
||||||
[JsonConstructor]
|
|
||||||
public AppSettings(string apiLoggingContentTypes,
|
|
||||||
string apiLoggingPathPrefixes,
|
|
||||||
string apiLogPath,
|
|
||||||
string attachmentPath,
|
|
||||||
string buildNumber,
|
|
||||||
string company,
|
|
||||||
string connectionString,
|
|
||||||
string gitCommitSeven,
|
|
||||||
string inboundApiAllowedIPList,
|
|
||||||
string monAResource,
|
|
||||||
string monASite,
|
|
||||||
string oi2SqlConnectionString,
|
|
||||||
string oiExportPath,
|
|
||||||
string urls,
|
|
||||||
string workingDirectoryName)
|
|
||||||
{
|
|
||||||
ApiLoggingContentTypes = apiLoggingContentTypes;
|
|
||||||
ApiLoggingPathPrefixes = apiLoggingPathPrefixes;
|
|
||||||
ApiLogPath = apiLogPath;
|
|
||||||
AttachmentPath = attachmentPath;
|
|
||||||
BuildNumber = buildNumber;
|
|
||||||
Company = company;
|
|
||||||
ConnectionString = connectionString;
|
|
||||||
GitCommitSeven = gitCommitSeven;
|
|
||||||
InboundApiAllowedIPList = inboundApiAllowedIPList;
|
|
||||||
MonAResource = monAResource;
|
|
||||||
MonASite = monASite;
|
|
||||||
Oi2SqlConnectionString = oi2SqlConnectionString;
|
|
||||||
OIExportPath = oiExportPath;
|
|
||||||
URLs = urls;
|
|
||||||
WorkingDirectoryName = workingDirectoryName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
|
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
|
||||||
|
2
Archive/Models/Binder/.editorconfig
Normal file
2
Archive/Models/Binder/.editorconfig
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[*.cs]
|
||||||
|
csharp_preserve_single_line_statements = true
|
@ -1,5 +1,5 @@
|
|||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
|
||||||
namespace OI.Metrology.Archive.Models.Binder;
|
namespace OI.Metrology.Archive.Models.Binder;
|
||||||
@ -7,25 +7,21 @@ namespace OI.Metrology.Archive.Models.Binder;
|
|||||||
public class AppSettings
|
public class AppSettings
|
||||||
{
|
{
|
||||||
|
|
||||||
#nullable disable
|
public string? ApiLoggingContentTypes { get; set; }
|
||||||
|
public string? ApiLoggingPathPrefixes { get; set; }
|
||||||
[Display(Name = "Api Logging Content Types"), Required] public string ApiLoggingContentTypes { get; set; }
|
public string? ApiLogPath { get; set; }
|
||||||
[Display(Name = "Api Logging Path Prefixes"), Required] public string ApiLoggingPathPrefixes { get; set; }
|
public string? AttachmentPath { get; set; }
|
||||||
[Display(Name = "Api Log Path"), Required] public string ApiLogPath { get; set; }
|
public string? BuildNumber { get; set; }
|
||||||
[Display(Name = "Attachment Path"), Required] public string AttachmentPath { get; set; }
|
public string? Company { get; set; }
|
||||||
[Display(Name = "Build Number"), Required] public string BuildNumber { get; set; }
|
public string? ConnectionString { get; set; }
|
||||||
[Display(Name = "Company"), Required] public string Company { get; set; }
|
public string? GitCommitSeven { get; set; }
|
||||||
[Display(Name = "Connection String"), Required] public string ConnectionString { get; set; }
|
public string? InboundApiAllowedIPList { get; set; }
|
||||||
[Display(Name = "Git Commit Seven"), Required] public string GitCommitSeven { get; set; }
|
public string? MonAResource { get; set; }
|
||||||
[Display(Name = "Inbound Api Allowed IP List"), Required] public string InboundApiAllowedIPList { get; set; }
|
public string? MonASite { get; set; }
|
||||||
[Display(Name = "MonA Resource"), Required] public string MonAResource { get; set; }
|
public string? Oi2SqlConnectionString { get; set; }
|
||||||
[Display(Name = "MonA Site"), Required] public string MonASite { get; set; }
|
public string? OIExportPath { get; set; }
|
||||||
[Display(Name = "Oi 2 Sql Connection String"), Required] public string Oi2SqlConnectionString { get; set; }
|
public string? URLs { get; set; }
|
||||||
[Display(Name = "OI Export Path"), Required] public string OIExportPath { get; set; }
|
public string? WorkingDirectoryName { get; set; }
|
||||||
[Display(Name = "URLs"), Required] public string URLs { get; set; }
|
|
||||||
[Display(Name = "Working Directory Name"), Required] public string WorkingDirectoryName { get; set; }
|
|
||||||
|
|
||||||
#nullable restore
|
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
@ -33,9 +29,25 @@ public class AppSettings
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Models.AppSettings Get(AppSettings appSettings)
|
private static Models.AppSettings Get(AppSettings? appSettings)
|
||||||
{
|
{
|
||||||
Models.AppSettings result;
|
Models.AppSettings result;
|
||||||
|
if (appSettings is null) throw new NullReferenceException(nameof(appSettings));
|
||||||
|
if (appSettings.ApiLoggingContentTypes is null) throw new NullReferenceException(nameof(ApiLoggingContentTypes));
|
||||||
|
if (appSettings.ApiLoggingPathPrefixes is null) throw new NullReferenceException(nameof(ApiLoggingPathPrefixes));
|
||||||
|
if (appSettings.ApiLogPath is null) throw new NullReferenceException(nameof(ApiLogPath));
|
||||||
|
if (appSettings.AttachmentPath is null) throw new NullReferenceException(nameof(AttachmentPath));
|
||||||
|
if (appSettings.BuildNumber is null) throw new NullReferenceException(nameof(BuildNumber));
|
||||||
|
if (appSettings.Company is null) throw new NullReferenceException(nameof(Company));
|
||||||
|
if (appSettings.ConnectionString is null) throw new NullReferenceException(nameof(ConnectionString));
|
||||||
|
if (appSettings.GitCommitSeven is null) throw new NullReferenceException(nameof(GitCommitSeven));
|
||||||
|
if (appSettings.InboundApiAllowedIPList is null) throw new NullReferenceException(nameof(InboundApiAllowedIPList));
|
||||||
|
if (appSettings.MonAResource is null) throw new NullReferenceException(nameof(MonAResource));
|
||||||
|
if (appSettings.MonASite is null) throw new NullReferenceException(nameof(MonASite));
|
||||||
|
if (appSettings.Oi2SqlConnectionString is null) throw new NullReferenceException(nameof(Oi2SqlConnectionString));
|
||||||
|
if (appSettings.OIExportPath is null) throw new NullReferenceException(nameof(OIExportPath));
|
||||||
|
if (appSettings.URLs is null) throw new NullReferenceException(nameof(URLs));
|
||||||
|
if (appSettings.WorkingDirectoryName is null) throw new NullReferenceException(nameof(WorkingDirectoryName));
|
||||||
result = new(
|
result = new(
|
||||||
appSettings.ApiLoggingContentTypes,
|
appSettings.ApiLoggingContentTypes,
|
||||||
appSettings.ApiLoggingPathPrefixes,
|
appSettings.ApiLoggingPathPrefixes,
|
||||||
@ -58,7 +70,23 @@ public class AppSettings
|
|||||||
public static Models.AppSettings Get(IConfigurationRoot configurationRoot)
|
public static Models.AppSettings Get(IConfigurationRoot configurationRoot)
|
||||||
{
|
{
|
||||||
Models.AppSettings result;
|
Models.AppSettings result;
|
||||||
AppSettings appSettings = configurationRoot.Get<AppSettings>();
|
#pragma warning disable IL3050, IL2026
|
||||||
|
AppSettings? appSettings = configurationRoot.Get<AppSettings>();
|
||||||
|
#pragma warning restore IL3050, IL2026
|
||||||
|
if (appSettings?.ApiLoggingContentTypes is null)
|
||||||
|
{
|
||||||
|
foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers)
|
||||||
|
{
|
||||||
|
if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider)
|
||||||
|
continue;
|
||||||
|
if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider)
|
||||||
|
continue;
|
||||||
|
if (!physicalFileProvider.Root.Contains("UserSecrets"))
|
||||||
|
continue;
|
||||||
|
throw new NotSupportedException(physicalFileProvider.Root);
|
||||||
|
}
|
||||||
|
throw new NotSupportedException("Not found!");
|
||||||
|
}
|
||||||
result = Get(appSettings);
|
result = Get(appSettings);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -8,12 +8,14 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ImplicitUsings>disable</ImplicitUsings>
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
<IsPackable>false</IsPackable>
|
<IsPackable>false</IsPackable>
|
||||||
<LangVersion>10.0</LangVersion>
|
<Nullable>enable</Nullable>
|
||||||
<Nullable>disable</Nullable>
|
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<InternalsVisibleTo Include="Tests" />
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Remove="logs\**" />
|
<Compile Remove="logs\**" />
|
||||||
<Content Remove="logs\**" />
|
<Content Remove="logs\**" />
|
||||||
@ -24,30 +26,19 @@
|
|||||||
<Content Remove="compilerconfig.json" />
|
<Content Remove="compilerconfig.json" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Dapper" Version="2.0.123" />
|
<PackageReference Include="Dapper" Version="2.1.4" />
|
||||||
<PackageReference Include="EntityFramework" Version="6.4.4" />
|
<PackageReference Include="EntityFramework" Version="6.4.4" />
|
||||||
<PackageReference Include="jQuery" Version="3.6.0" />
|
<PackageReference Include="jQuery" Version="3.7.1" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
</ItemGroup>
|
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.0" />
|
||||||
<ItemGroup>
|
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.1" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
|
||||||
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
||||||
|
<PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Serilog.AspNetCore" Version="5.0.0" />
|
<ProjectReference Include="..\Shared\OI.Metrology.Shared.csproj" />
|
||||||
<PackageReference Include="Serilog.AspNetCore.Ingestion" Version="1.0.0-dev-00021" />
|
|
||||||
<PackageReference Include="Serilog.Settings.Configuration" Version="3.3.0" />
|
|
||||||
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />
|
|
||||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\Shared\Shared.csproj" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="moves\" />
|
<Folder Include="moves\" />
|
@ -9,9 +9,9 @@ using OI.Metrology.Archive.Models;
|
|||||||
using OI.Metrology.Archive.Repositories;
|
using OI.Metrology.Archive.Repositories;
|
||||||
using OI.Metrology.Archive.Services;
|
using OI.Metrology.Archive.Services;
|
||||||
using OI.Metrology.Shared.Models;
|
using OI.Metrology.Shared.Models;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Repositories;
|
||||||
using OI.Metrology.Shared.Services;
|
using OI.Metrology.Shared.Services;
|
||||||
using Serilog;
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@ -25,7 +25,7 @@ public class Program
|
|||||||
{
|
{
|
||||||
string webRootPath;
|
string webRootPath;
|
||||||
Assembly assembly = Assembly.GetExecutingAssembly();
|
Assembly assembly = Assembly.GetExecutingAssembly();
|
||||||
string assemblyName = assembly.GetName()?.Name;
|
string? assemblyName = assembly.GetName()?.Name;
|
||||||
if (string.IsNullOrEmpty(assemblyName))
|
if (string.IsNullOrEmpty(assemblyName))
|
||||||
throw new Exception();
|
throw new Exception();
|
||||||
string baseAssemblyName = assemblyName.Split('.')[0];
|
string baseAssemblyName = assemblyName.Split('.')[0];
|
||||||
@ -46,30 +46,26 @@ public class Program
|
|||||||
|
|
||||||
public static int Main(string[] args)
|
public static int Main(string[] args)
|
||||||
{
|
{
|
||||||
LoggerConfiguration loggerConfiguration = new();
|
ILogger<Program>? logger = null;
|
||||||
(string assemblyName, WebApplicationOptions _) = Get(args);
|
(string assemblyName, WebApplicationOptions _) = Get(args);
|
||||||
WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
|
WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
|
||||||
_ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
|
_ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
|
||||||
AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration);
|
AppSettings _AppSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration);
|
||||||
if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName))
|
if (string.IsNullOrEmpty(_AppSettings.WorkingDirectoryName))
|
||||||
throw new Exception("Working directory name must have a value!");
|
throw new Exception("Working directory name must have a value!");
|
||||||
string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assemblyName, appSettings.WorkingDirectoryName);
|
string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assemblyName, _AppSettings.WorkingDirectoryName);
|
||||||
Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory);
|
Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory);
|
||||||
_ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, webApplicationBuilder.Configuration);
|
|
||||||
_ = SerilogHostBuilderExtensions.UseSerilog(webApplicationBuilder.Host);
|
|
||||||
Log.Logger = loggerConfiguration.CreateLogger();
|
|
||||||
Serilog.ILogger log = Log.ForContext<Program>();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);
|
_ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);
|
||||||
_ = webApplicationBuilder.Services.AddControllersWithViews();
|
_ = webApplicationBuilder.Services.AddControllersWithViews();
|
||||||
_ = new MetrologyRepo(new SQLDbConnectionFactory(appSettings), null);
|
_ = new MetrologyRepository(new SQLDbConnectionFactory(_AppSettings), null);
|
||||||
_ = webApplicationBuilder.Services.AddDistributedMemoryCache();
|
_ = webApplicationBuilder.Services.AddDistributedMemoryCache();
|
||||||
_ = webApplicationBuilder.Services.AddMemoryCache();
|
_ = webApplicationBuilder.Services.AddMemoryCache();
|
||||||
_ = webApplicationBuilder.Services.AddSingleton<AppSettings, AppSettings>(_ => appSettings);
|
_ = webApplicationBuilder.Services.AddSingleton<AppSettings, AppSettings>(_ => _AppSettings);
|
||||||
_ = webApplicationBuilder.Services.AddScoped<IAttachmentsService, AttachmentsService>();
|
_ = webApplicationBuilder.Services.AddScoped<IAttachmentsService, AttachmentsService>();
|
||||||
_ = webApplicationBuilder.Services.AddScoped<IInboundDataService, InboundDataService>();
|
_ = webApplicationBuilder.Services.AddScoped<IInboundDataService, InboundDataService>();
|
||||||
_ = webApplicationBuilder.Services.AddScoped<IMetrologyRepo, MetrologyRepo>();
|
_ = webApplicationBuilder.Services.AddScoped<IMetrologyRepository, MetrologyRepository>();
|
||||||
_ = webApplicationBuilder.Services.AddScoped<IRdsMaxRepo, RdsMaxRepo>();
|
_ = webApplicationBuilder.Services.AddScoped<IRdsMaxRepo, RdsMaxRepo>();
|
||||||
_ = webApplicationBuilder.Services.AddSingleton<IDbConnectionFactory, SQLDbConnectionFactory>();
|
_ = webApplicationBuilder.Services.AddSingleton<IDbConnectionFactory, SQLDbConnectionFactory>();
|
||||||
_ = webApplicationBuilder.Services.AddSwaggerGen();
|
_ = webApplicationBuilder.Services.AddSwaggerGen();
|
||||||
@ -83,13 +79,16 @@ public class Program
|
|||||||
if (WindowsServiceHelpers.IsWindowsService())
|
if (WindowsServiceHelpers.IsWindowsService())
|
||||||
{
|
{
|
||||||
_ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
|
_ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
|
||||||
|
#pragma warning disable CA1416
|
||||||
_ = webApplicationBuilder.Logging.AddEventLog(settings =>
|
_ = webApplicationBuilder.Logging.AddEventLog(settings =>
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(settings.SourceName))
|
if (string.IsNullOrEmpty(settings.SourceName))
|
||||||
settings.SourceName = webApplicationBuilder.Environment.ApplicationName;
|
settings.SourceName = webApplicationBuilder.Environment.ApplicationName;
|
||||||
});
|
});
|
||||||
|
#pragma warning restore
|
||||||
}
|
}
|
||||||
WebApplication webApplication = webApplicationBuilder.Build();
|
WebApplication webApplication = webApplicationBuilder.Build();
|
||||||
|
logger = webApplication.Services.GetRequiredService<ILogger<Program>>();
|
||||||
if (!webApplicationBuilder.Environment.IsDevelopment())
|
if (!webApplicationBuilder.Environment.IsDevelopment())
|
||||||
{
|
{
|
||||||
_ = webApplication.UseExceptionHandler("/Error");
|
_ = webApplication.UseExceptionHandler("/Error");
|
||||||
@ -97,7 +96,7 @@ public class Program
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(appSettings.URLs))
|
if (string.IsNullOrEmpty(_AppSettings.URLs))
|
||||||
{
|
{
|
||||||
Environment.ExitCode = -1;
|
Environment.ExitCode = -1;
|
||||||
webApplication.Lifetime.StopApplication();
|
webApplication.Lifetime.StopApplication();
|
||||||
@ -105,27 +104,22 @@ public class Program
|
|||||||
_ = webApplication.UseSwagger();
|
_ = webApplication.UseSwagger();
|
||||||
_ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Archive V1"));
|
_ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Archive V1"));
|
||||||
}
|
}
|
||||||
_ = webApplication.Lifetime.ApplicationStopped.Register(Log.CloseAndFlush);
|
|
||||||
_ = ApplicationBuilderSerilogClientExtensions.UseSerilogIngestion(webApplication);
|
|
||||||
_ = SerilogApplicationBuilderExtensions.UseSerilogRequestLogging(webApplication);
|
|
||||||
_ = webApplication.UseFileServer(enableDirectoryBrowsing: true);
|
_ = webApplication.UseFileServer(enableDirectoryBrowsing: true);
|
||||||
_ = webApplication.UseStaticFiles();
|
_ = webApplication.UseStaticFiles();
|
||||||
_ = webApplication.UseSession();
|
_ = webApplication.UseSession();
|
||||||
_ = webApplication.UseHttpsRedirection();
|
_ = webApplication.UseHttpsRedirection();
|
||||||
_ = webApplication.UseMiddleware<ApiLoggingMiddleware>();
|
_ = webApplication.UseMiddleware<ApiLoggingMiddleware>();
|
||||||
_ = webApplication.MapControllers();
|
_ = webApplication.MapControllers();
|
||||||
log.Information("Starting Web Application");
|
logger.LogInformation("Starting Web Application");
|
||||||
webApplication.Run();
|
webApplication.Run();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
log.Fatal(ex, "Host terminated unexpectedly");
|
try
|
||||||
return 1;
|
{ logger?.LogCritical(ex, "Host terminated unexpectedly"); }
|
||||||
}
|
catch (Exception) { }
|
||||||
finally
|
throw;
|
||||||
{
|
|
||||||
Log.CloseAndFlush();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using Microsoft.Extensions.Caching.Memory;
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using OI.Metrology.Shared.DataModels;
|
using OI.Metrology.Shared.DataModels;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Repositories;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -12,12 +13,14 @@ using System.Transactions;
|
|||||||
|
|
||||||
namespace OI.Metrology.Archive.Repositories;
|
namespace OI.Metrology.Archive.Repositories;
|
||||||
|
|
||||||
public class MetrologyRepo : IMetrologyRepo
|
#nullable disable
|
||||||
|
|
||||||
|
public class MetrologyRepository : IMetrologyRepository
|
||||||
{
|
{
|
||||||
private readonly IDbConnectionFactory _DBConnectionFactory;
|
private readonly IDbConnectionFactory _DBConnectionFactory;
|
||||||
private readonly IMemoryCache _Cache;
|
private readonly IMemoryCache _Cache;
|
||||||
|
|
||||||
public MetrologyRepo(IDbConnectionFactory dbConnectionFactory, IMemoryCache memoryCache)
|
public MetrologyRepository(IDbConnectionFactory dbConnectionFactory, IMemoryCache memoryCache)
|
||||||
{
|
{
|
||||||
_DBConnectionFactory = dbConnectionFactory;
|
_DBConnectionFactory = dbConnectionFactory;
|
||||||
_Cache = memoryCache;
|
_Cache = memoryCache;
|
||||||
@ -28,20 +31,6 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
protected DbProviderFactory GetDbProviderFactory(IDbConnection conn) =>
|
protected DbProviderFactory GetDbProviderFactory(IDbConnection conn) =>
|
||||||
DbProviderFactories.GetFactory(conn.GetType().Namespace);
|
DbProviderFactories.GetFactory(conn.GetType().Namespace);
|
||||||
|
|
||||||
public bool IsTestDatabase()
|
|
||||||
{
|
|
||||||
int c = 0;
|
|
||||||
using (DbConnection conn = GetDbConnection())
|
|
||||||
{
|
|
||||||
c = conn.Query<int>(
|
|
||||||
"SELECT COUNT(*) " +
|
|
||||||
"FROM Configuration " +
|
|
||||||
"WHERE KeyName = 'TestDatabase' " +
|
|
||||||
"AND ValueString = '1'").FirstOrDefault();
|
|
||||||
}
|
|
||||||
return c > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TransactionScope StartTransaction() => new();
|
public TransactionScope StartTransaction() => new();
|
||||||
|
|
||||||
protected void CacheItem(string key, object v)
|
protected void CacheItem(string key, object v)
|
||||||
@ -136,10 +125,10 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
// build field map
|
// build field map
|
||||||
foreach (ToolTypeMetadata f in fields)
|
foreach (ToolTypeMetadata f in fields)
|
||||||
{
|
{
|
||||||
if ((f.ApiName != null) && f.ApiName.Contains('\\'))
|
if ((f.ApiName is not null) && f.ApiName.Contains('\\'))
|
||||||
{
|
{
|
||||||
string n = f.ApiName.Split('\\')[0].Trim().ToUpper();
|
string n = f.ApiName.Split('\\')[0].Trim().ToUpper();
|
||||||
if (containerField == null)
|
if (containerField is null)
|
||||||
containerField = n;
|
containerField = n;
|
||||||
else if (!string.Equals(containerField, n))
|
else if (!string.Equals(containerField, n))
|
||||||
throw new Exception("Only one container field is allowed");
|
throw new Exception("Only one container field is allowed");
|
||||||
@ -153,7 +142,7 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (containerField == null)
|
if (containerField is null)
|
||||||
{
|
{
|
||||||
// No container field, just insert a single row
|
// No container field, just insert a single row
|
||||||
|
|
||||||
@ -164,7 +153,7 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
// Find the container field in the json
|
// Find the container field in the json
|
||||||
JProperty contJP = jsonrow.Children<JProperty>().Where(c => string.Equals(c.Name.Trim(), containerField, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();
|
JProperty contJP = jsonrow.Children<JProperty>().Where(c => string.Equals(c.Name.Trim(), containerField, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();
|
||||||
|
|
||||||
if ((contJP != null) && (contJP.Value is JArray array))
|
if ((contJP is not null) && (contJP.Value is JArray array))
|
||||||
{
|
{
|
||||||
JArray contRows = array;
|
JArray contRows = array;
|
||||||
|
|
||||||
@ -227,14 +216,13 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
parmnumber += 1;
|
parmnumber += 1;
|
||||||
|
|
||||||
object sqlValue = ((JValue)jp.Value).Value;
|
object sqlValue = ((JValue)jp.Value).Value;
|
||||||
if (sqlValue == null)
|
sqlValue ??= DBNull.Value;
|
||||||
sqlValue = DBNull.Value;
|
|
||||||
|
|
||||||
AddParameter(cmd, parmname, sqlValue);
|
AddParameter(cmd, parmname, sqlValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((containerrow != null) && (containerFieldmap != null))
|
if ((containerrow is not null) && (containerFieldmap is not null))
|
||||||
{
|
{
|
||||||
|
|
||||||
foreach (JProperty jp in containerrow.Children<JProperty>())
|
foreach (JProperty jp in containerrow.Children<JProperty>())
|
||||||
@ -251,8 +239,7 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
parmnumber += 1;
|
parmnumber += 1;
|
||||||
|
|
||||||
object sqlValue = ((JValue)jp.Value).Value;
|
object sqlValue = ((JValue)jp.Value).Value;
|
||||||
if (sqlValue == null)
|
sqlValue ??= DBNull.Value;
|
||||||
sqlValue = DBNull.Value;
|
|
||||||
|
|
||||||
AddParameter(cmd, parmname, sqlValue);
|
AddParameter(cmd, parmname, sqlValue);
|
||||||
}
|
}
|
||||||
@ -266,7 +253,7 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
cmd.CommandText = columns.TrimEnd(',') + parms.TrimEnd(',') + ";SELECT SCOPE_IDENTITY();";
|
cmd.CommandText = columns.TrimEnd(',') + parms.TrimEnd(',') + ";SELECT SCOPE_IDENTITY();";
|
||||||
|
|
||||||
object o = cmd.ExecuteScalar();
|
object o = cmd.ExecuteScalar();
|
||||||
if ((o == null) || Convert.IsDBNull(o))
|
if ((o is null) || Convert.IsDBNull(o))
|
||||||
throw new Exception("Unexpected query result");
|
throw new Exception("Unexpected query result");
|
||||||
return Convert.ToInt64(o);
|
return Convert.ToInt64(o);
|
||||||
}
|
}
|
||||||
@ -306,7 +293,7 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
{
|
{
|
||||||
if (!firstField)
|
if (!firstField)
|
||||||
_ = sb.Append(',');
|
_ = sb.Append(',');
|
||||||
if (f.GridAttributes != null && f.GridAttributes.Contains("isNull"))
|
if (f.GridAttributes is not null && f.GridAttributes.Contains("isNull"))
|
||||||
{
|
{
|
||||||
_ = sb.AppendFormat("{0}", "ISNULL(" + f.ColumnName + ", '')[" + f.ColumnName + "]");
|
_ = sb.AppendFormat("{0}", "ISNULL(" + f.ColumnName + ", '')[" + f.ColumnName + "]");
|
||||||
}
|
}
|
||||||
@ -323,13 +310,9 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
|
|
||||||
public DataTable GetHeaders(int toolTypeId, DateTime? startTime, DateTime? endTime, int? pageNo, int? pageSize, long? headerId, out long totalRecords)
|
public DataTable GetHeaders(int toolTypeId, DateTime? startTime, DateTime? endTime, int? pageNo, int? pageSize, long? headerId, out long totalRecords)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
|
||||||
|
|
||||||
IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId);
|
IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId) ?? throw new Exception("Invalid tool type metadata");
|
||||||
if (md == null)
|
|
||||||
throw new Exception("Invalid tool type metadata");
|
|
||||||
|
|
||||||
DataTable dt = new();
|
DataTable dt = new();
|
||||||
|
|
||||||
@ -419,13 +402,9 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
// Go Here Next
|
// Go Here Next
|
||||||
public DataTable GetData(int toolTypeId, long headerid)
|
public DataTable GetData(int toolTypeId, long headerid)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
|
||||||
|
|
||||||
IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId);
|
IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId) ?? throw new Exception("Invalid tool type metadata");
|
||||||
if (md == null)
|
|
||||||
throw new Exception("Invalid tool type metadata");
|
|
||||||
|
|
||||||
DataTable dt = new();
|
DataTable dt = new();
|
||||||
|
|
||||||
@ -530,13 +509,9 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
}
|
}
|
||||||
public DataTable GetDataSharePoint(int toolTypeId, string headerid)
|
public DataTable GetDataSharePoint(int toolTypeId, string headerid)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
|
||||||
|
|
||||||
IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId);
|
IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId) ?? throw new Exception("Invalid tool type metadata");
|
||||||
if (md == null)
|
|
||||||
throw new Exception("Invalid tool type metadata");
|
|
||||||
|
|
||||||
DataTable dt = new();
|
DataTable dt = new();
|
||||||
|
|
||||||
@ -625,9 +600,7 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
}
|
}
|
||||||
public Guid GetHeaderAttachmentID(int toolTypeId, long headerId)
|
public Guid GetHeaderAttachmentID(int toolTypeId, long headerId)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
|
||||||
|
|
||||||
using DbConnection conn = GetDbConnection();
|
using DbConnection conn = GetDbConnection();
|
||||||
string sql =
|
string sql =
|
||||||
@ -638,9 +611,7 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
|
|
||||||
public Guid GetDataAttachmentID(int toolTypeId, long headerId, string title)
|
public Guid GetDataAttachmentID(int toolTypeId, long headerId, string title)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
|
||||||
|
|
||||||
using DbConnection conn = GetDbConnection();
|
using DbConnection conn = GetDbConnection();
|
||||||
string sql =
|
string sql =
|
||||||
@ -657,9 +628,7 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
|
|
||||||
public DataSet GetOIExportData(int toolTypeId, long headerid)
|
public DataSet GetOIExportData(int toolTypeId, long headerid)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(tt.OIExportSPName))
|
if (string.IsNullOrWhiteSpace(tt.OIExportSPName))
|
||||||
throw new Exception("OpenInsight export not available for " + tt.ToolTypeName);
|
throw new Exception("OpenInsight export not available for " + tt.ToolTypeName);
|
||||||
@ -684,28 +653,29 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
return ds;
|
return ds;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<HeaderCommon> GetHeaderTitles(int toolTypeId, int? pageNo, int? pageSize, out long totalRecords)
|
public HeaderCommon[] GetHeaderTitles(int? toolTypeId, int? pageNo, int? pageSize, out long totalRecords)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
if (toolTypeId is null)
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
throw new Exception("Invalid tool type ID");
|
||||||
|
|
||||||
|
ToolType tt = GetToolTypeByID(toolTypeId.Value) ?? throw new Exception("Invalid tool type ID");
|
||||||
|
|
||||||
DbConnection conn = GetDbConnection();
|
DbConnection conn = GetDbConnection();
|
||||||
using (conn)
|
using (conn)
|
||||||
{
|
{
|
||||||
string sql = $"SELECT ID, InsertDate, AttachmentID, Title, [Date] FROM {tt.HeaderTableName} ORDER BY [Date] DESC ";
|
string sql = $"SELECT ID, InsertDate, AttachmentID, Title, [Date] FROM {tt.HeaderTableName} ORDER BY [Date] DESC ";
|
||||||
|
|
||||||
IEnumerable<HeaderCommon> headers;
|
HeaderCommon[] headers;
|
||||||
|
|
||||||
if (pageNo.HasValue && pageSize.HasValue)
|
if (pageNo.HasValue && pageSize.HasValue)
|
||||||
{
|
{
|
||||||
sql += "OFFSET @PageNum * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY";
|
sql += "OFFSET @PageNum * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY";
|
||||||
|
|
||||||
headers = conn.Query<HeaderCommon>(sql, param: new { PageNum = pageNo.Value, PageSize = pageSize.Value }).ToList();
|
headers = conn.Query<HeaderCommon>(sql, param: new { PageNum = pageNo.Value, PageSize = pageSize.Value }).ToArray();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
headers = conn.Query<HeaderCommon>(sql).ToList();
|
headers = conn.Query<HeaderCommon>(sql).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
sql = $"SELECT COUNT(*) FROM [{tt.HeaderTableName}] ";
|
sql = $"SELECT COUNT(*) FROM [{tt.HeaderTableName}] ";
|
||||||
@ -718,13 +688,9 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
|
|
||||||
public IEnumerable<KeyValuePair<string, string>> GetHeaderFields(int toolTypeId, long headerid)
|
public IEnumerable<KeyValuePair<string, string>> GetHeaderFields(int toolTypeId, long headerid)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
|
||||||
|
|
||||||
IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId);
|
IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId) ?? throw new Exception("Invalid tool type metadata");
|
||||||
if (md == null)
|
|
||||||
throw new Exception("Invalid tool type metadata");
|
|
||||||
|
|
||||||
List<KeyValuePair<string, string>> r = new();
|
List<KeyValuePair<string, string>> r = new();
|
||||||
|
|
||||||
@ -751,10 +717,10 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
foreach (ToolTypeMetadata m in md.Where(m => m.Header == true && m.TableDisplayOrder > 0).OrderBy(m => m.TableDisplayOrder))
|
foreach (ToolTypeMetadata m in md.Where(m => m.Header == true && m.TableDisplayOrder > 0).OrderBy(m => m.TableDisplayOrder))
|
||||||
{
|
{
|
||||||
string v = "";
|
string v = "";
|
||||||
if (dr != null)
|
if (dr is not null)
|
||||||
{
|
{
|
||||||
object o = dr[m.ColumnName];
|
object o = dr[m.ColumnName];
|
||||||
if (o != null && !Convert.IsDBNull(o))
|
if (o is not null && !Convert.IsDBNull(o))
|
||||||
v = Convert.ToString(o);
|
v = Convert.ToString(o);
|
||||||
}
|
}
|
||||||
KeyValuePair<string, string> kvp = new(m.DisplayTitle, v);
|
KeyValuePair<string, string> kvp = new(m.DisplayTitle, v);
|
||||||
@ -764,17 +730,15 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<AwaitingDispo> GetAwaitingDispo()
|
public IEnumerable<AwaitingDisposition> GetAwaitingDisposition()
|
||||||
{
|
{
|
||||||
using DbConnection conn = GetDbConnection();
|
using DbConnection conn = GetDbConnection();
|
||||||
return conn.Query<AwaitingDispo>("GetAwaitingDispo", commandType: CommandType.StoredProcedure);
|
return conn.Query<AwaitingDisposition>("GetAwaitingDispo", commandType: CommandType.StoredProcedure);
|
||||||
}
|
}
|
||||||
// Jonathan changed this to remove the reviewDate update on the database.
|
// Jonathan changed this to remove the reviewDate update on the database.
|
||||||
public int UpdateReviewDate(int toolTypeId, long headerId, bool clearDate)
|
public int UpdateReviewDate(int toolTypeId, long headerId, bool clearDate)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
|
||||||
|
|
||||||
using DbConnection conn = GetDbConnection();
|
using DbConnection conn = GetDbConnection();
|
||||||
if (clearDate)
|
if (clearDate)
|
||||||
@ -793,9 +757,7 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
|
|
||||||
public Guid GetHeaderAttachmentIDByTitle(int toolTypeId, string title)
|
public Guid GetHeaderAttachmentIDByTitle(int toolTypeId, string title)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
|
||||||
|
|
||||||
using DbConnection conn = GetDbConnection();
|
using DbConnection conn = GetDbConnection();
|
||||||
string sql =
|
string sql =
|
||||||
@ -805,9 +767,7 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
|
|
||||||
public Guid GetDataAttachmentIDByTitle(int toolTypeId, string title)
|
public Guid GetDataAttachmentIDByTitle(int toolTypeId, string title)
|
||||||
{
|
{
|
||||||
ToolType tt = GetToolTypeByID(toolTypeId);
|
ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
|
||||||
if (tt == null)
|
|
||||||
throw new Exception("Invalid tool type ID");
|
|
||||||
|
|
||||||
using DbConnection conn = GetDbConnection();
|
using DbConnection conn = GetDbConnection();
|
||||||
string sql =
|
string sql =
|
||||||
@ -815,8 +775,8 @@ public class MetrologyRepo : IMetrologyRepo
|
|||||||
return conn.ExecuteScalar<Guid>(sql, param: new { Title = title });
|
return conn.ExecuteScalar<Guid>(sql, param: new { Title = title });
|
||||||
}
|
}
|
||||||
|
|
||||||
string IMetrologyRepo.GetHeaderInsertDate(int toolTypeId, long headerId) => throw new NotImplementedException();
|
string IMetrologyRepository.GetHeaderInsertDate(int toolTypeId, long headerId) => throw new NotImplementedException();
|
||||||
void IMetrologyRepo.SetHeaderDirName(string tableName, long headerId, string dateDir) => throw new NotImplementedException();
|
void IMetrologyRepository.SetHeaderDirName(string tableName, long headerId, string dateDir) => throw new NotImplementedException();
|
||||||
string IMetrologyRepo.GetDataInsertDate(int toolTypeId, long headerId, string title) => throw new NotImplementedException();
|
string IMetrologyRepository.GetDataInsertDate(int toolTypeId, long headerId, string title) => throw new NotImplementedException();
|
||||||
void IMetrologyRepo.SetDataDirName(string tableName, long headerId, string title, string dateDir) => throw new NotImplementedException();
|
void IMetrologyRepository.SetDataDirName(string tableName, long headerId, string title, string dateDir) => throw new NotImplementedException();
|
||||||
}
|
}
|
@ -11,6 +11,8 @@ using System.Text;
|
|||||||
|
|
||||||
namespace OI.Metrology.Archive.Repositories;
|
namespace OI.Metrology.Archive.Repositories;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
public class RdsMaxRepo : IRdsMaxRepo
|
public class RdsMaxRepo : IRdsMaxRepo
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -6,13 +6,15 @@ using System.Data.SqlClient;
|
|||||||
|
|
||||||
namespace OI.Metrology.Archive.Repositories;
|
namespace OI.Metrology.Archive.Repositories;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
public class SQLDbConnectionFactory : IDbConnectionFactory
|
public class SQLDbConnectionFactory : IDbConnectionFactory
|
||||||
{
|
{
|
||||||
private readonly AppSettings _AppSettings;
|
private readonly AppSettings _AppSettings;
|
||||||
|
|
||||||
public SQLDbConnectionFactory(AppSettings appSettings) => _AppSettings = appSettings;
|
public SQLDbConnectionFactory(AppSettings appSettings) => _AppSettings = appSettings;
|
||||||
|
|
||||||
public DbConnection GetDbConnection()
|
public DbConnection GetDbConnection(bool? useOI2Sql = null)
|
||||||
{
|
{
|
||||||
DbProviderFactories.RegisterFactory(
|
DbProviderFactories.RegisterFactory(
|
||||||
typeof(SqlConnection).Namespace,
|
typeof(SqlConnection).Namespace,
|
||||||
|
@ -4,29 +4,31 @@ using System.IO;
|
|||||||
|
|
||||||
namespace OI.Metrology.Archive.Services;
|
namespace OI.Metrology.Archive.Services;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
using OI.Metrology.Archive.Models;
|
using OI.Metrology.Archive.Models;
|
||||||
using OI.Metrology.Shared.DataModels;
|
using OI.Metrology.Shared.DataModels;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.Services;
|
using OI.Metrology.Shared.Services;
|
||||||
using System.Data.SqlClient;
|
using System.Data.SqlClient;
|
||||||
|
|
||||||
public class AttachmentsService : IAttachmentsService
|
public class AttachmentsService : IAttachmentsService
|
||||||
{
|
{
|
||||||
|
|
||||||
private readonly IMetrologyRepo _Repo;
|
|
||||||
private readonly AppSettings _AppSettings;
|
private readonly AppSettings _AppSettings;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
public AttachmentsService(AppSettings appSettings, IMetrologyRepo repo)
|
public AttachmentsService(AppSettings appSettings, IMetrologyRepository metrologyRepository)
|
||||||
{
|
{
|
||||||
_Repo = repo;
|
|
||||||
_AppSettings = appSettings;
|
_AppSettings = appSettings;
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
}
|
}
|
||||||
protected Stream GetAttachmentStream(string tableName, Guid attachmentId, string filename)
|
protected Stream GetAttachmentStream(string tableName, Guid attachmentId, string filename)
|
||||||
{
|
{
|
||||||
if (attachmentId.Equals(Guid.Empty))
|
if (attachmentId.Equals(Guid.Empty))
|
||||||
throw new Exception("No attachments found");
|
throw new Exception("No attachments found");
|
||||||
|
|
||||||
DateTime insertDate = Convert.ToDateTime(_Repo.GetAttachmentInsertDateByGUID(tableName, attachmentId));
|
DateTime insertDate = Convert.ToDateTime(_MetrologyRepository.GetAttachmentInsertDateByGUID(tableName, attachmentId));
|
||||||
int year = insertDate.Year;
|
int year = insertDate.Year;
|
||||||
DateTime d = insertDate;
|
DateTime d = insertDate;
|
||||||
CultureInfo cul = CultureInfo.CurrentCulture;
|
CultureInfo cul = CultureInfo.CurrentCulture;
|
||||||
@ -63,7 +65,7 @@ public class AttachmentsService : IAttachmentsService
|
|||||||
|
|
||||||
public Stream GetAttachmentStreamByTitle(ToolType toolType, bool header, string title, string filename)
|
public Stream GetAttachmentStreamByTitle(ToolType toolType, bool header, string title, string filename)
|
||||||
{
|
{
|
||||||
if (toolType == null)
|
if (toolType is null)
|
||||||
throw new Exception("Invalid tool type");
|
throw new Exception("Invalid tool type");
|
||||||
|
|
||||||
string queryString = "SELECT * FROM " + toolType.DataTableName + " WHERE AttachmentId = @attachmentId";
|
string queryString = "SELECT * FROM " + toolType.DataTableName + " WHERE AttachmentId = @attachmentId";
|
||||||
@ -72,7 +74,7 @@ public class AttachmentsService : IAttachmentsService
|
|||||||
queryString = "SELECT * FROM " + toolType.HeaderTableName + " WHERE AttachmentId = '" + title + "'";
|
queryString = "SELECT * FROM " + toolType.HeaderTableName + " WHERE AttachmentId = '" + title + "'";
|
||||||
}
|
}
|
||||||
DateTime SearchDate = new();
|
DateTime SearchDate = new();
|
||||||
string connectionString = @"Server=messv01ec.ec.local\PROD1,53959;Database=Metrology_Archive;Integrated Security=True";
|
string connectionString = @"Server=messqlec1.infineon.com\PROD1,53959;Database=Metrology_Archive;Integrated Security=True";
|
||||||
using (SqlConnection connection = new(connectionString))
|
using (SqlConnection connection = new(connectionString))
|
||||||
{
|
{
|
||||||
SqlCommand command = new(queryString, connection);
|
SqlCommand command = new(queryString, connection);
|
||||||
@ -103,19 +105,19 @@ public class AttachmentsService : IAttachmentsService
|
|||||||
if (header)
|
if (header)
|
||||||
{
|
{
|
||||||
tableName = toolType.HeaderTableName;
|
tableName = toolType.HeaderTableName;
|
||||||
attachmentId = _Repo.GetHeaderAttachmentIDByTitle(toolType.ID, title);
|
attachmentId = _MetrologyRepository.GetHeaderAttachmentIDByTitle(toolType.ID, title);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tableName = toolType.DataTableName;
|
tableName = toolType.DataTableName;
|
||||||
attachmentId = _Repo.GetDataAttachmentIDByTitle(toolType.ID, title);
|
attachmentId = _MetrologyRepository.GetDataAttachmentIDByTitle(toolType.ID, title);
|
||||||
}
|
}
|
||||||
return GetAttachmentStream(tableName, attachmentId, filename);
|
return GetAttachmentStream(tableName, attachmentId, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Stream GetAttachmentStreamByAttachmentId(ToolType toolType, bool header, Guid attachmentId, string filename)
|
public Stream GetAttachmentStreamByAttachmentId(ToolType toolType, bool header, Guid attachmentId, string filename)
|
||||||
{
|
{
|
||||||
if (toolType == null)
|
if (toolType is null)
|
||||||
throw new Exception("Invalid tool type");
|
throw new Exception("Invalid tool type");
|
||||||
string tableName;
|
string tableName;
|
||||||
if (header)
|
if (header)
|
||||||
@ -126,7 +128,7 @@ public class AttachmentsService : IAttachmentsService
|
|||||||
}
|
}
|
||||||
public Stream GetAttachmentStreamByAttachmentIdArchive(ToolType toolType, bool header, Guid attachmentId, string filename)
|
public Stream GetAttachmentStreamByAttachmentIdArchive(ToolType toolType, bool header, Guid attachmentId, string filename)
|
||||||
{
|
{
|
||||||
if (toolType == null)
|
if (toolType is null)
|
||||||
throw new Exception("Invalid tool type");
|
throw new Exception("Invalid tool type");
|
||||||
string tableName;
|
string tableName;
|
||||||
if (header)
|
if (header)
|
||||||
@ -139,21 +141,21 @@ public class AttachmentsService : IAttachmentsService
|
|||||||
|
|
||||||
private void SaveAttachment(ToolType toolType, long headerId, string dataUniqueId, string filename, Microsoft.AspNetCore.Http.IFormFile uploadedFile)
|
private void SaveAttachment(ToolType toolType, long headerId, string dataUniqueId, string filename, Microsoft.AspNetCore.Http.IFormFile uploadedFile)
|
||||||
{
|
{
|
||||||
if (toolType == null)
|
if (toolType is null)
|
||||||
throw new Exception("Invalid tool type");
|
throw new Exception("Invalid tool type");
|
||||||
|
|
||||||
using System.Transactions.TransactionScope trans = _Repo.StartTransaction();
|
using System.Transactions.TransactionScope trans = _MetrologyRepository.StartTransaction();
|
||||||
Guid attachmentId = Guid.Empty;
|
Guid attachmentId = Guid.Empty;
|
||||||
string tableName = "";
|
string tableName = "";
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(dataUniqueId))
|
if (string.IsNullOrWhiteSpace(dataUniqueId))
|
||||||
{
|
{
|
||||||
attachmentId = _Repo.GetHeaderAttachmentID(toolType.ID, headerId);
|
attachmentId = _MetrologyRepository.GetHeaderAttachmentID(toolType.ID, headerId);
|
||||||
tableName = toolType.HeaderTableName;
|
tableName = toolType.HeaderTableName;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
attachmentId = _Repo.GetDataAttachmentID(toolType.ID, headerId, dataUniqueId);
|
attachmentId = _MetrologyRepository.GetDataAttachmentID(toolType.ID, headerId, dataUniqueId);
|
||||||
tableName = toolType.DataTableName;
|
tableName = toolType.DataTableName;
|
||||||
}
|
}
|
||||||
if (Equals(attachmentId, Guid.Empty))
|
if (Equals(attachmentId, Guid.Empty))
|
||||||
@ -175,4 +177,7 @@ public class AttachmentsService : IAttachmentsService
|
|||||||
SaveAttachment(toolType, headerId, dataUniqueId, filename, formFile);
|
SaveAttachment(toolType, headerId, dataUniqueId, filename, formFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string IAttachmentsService.GetProcessDataStandardFormat(IMetrologyRepository metrologyRepository, string attachmentPath, int toolTypeId, long headerId) =>
|
||||||
|
throw new NotImplementedException();
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using OI.Metrology.Shared.DataModels;
|
using OI.Metrology.Shared.DataModels;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.Services;
|
using OI.Metrology.Shared.Services;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -8,11 +8,13 @@ using System.Linq;
|
|||||||
|
|
||||||
namespace OI.Metrology.Archive.Services;
|
namespace OI.Metrology.Archive.Services;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
public class InboundDataService : IInboundDataService
|
public class InboundDataService : IInboundDataService
|
||||||
{
|
{
|
||||||
private readonly IMetrologyRepo _Repo;
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
public InboundDataService(IMetrologyRepo repo) => _Repo = repo;
|
public InboundDataService(IMetrologyRepository metrologyRepository) => _MetrologyRepository = metrologyRepository;
|
||||||
|
|
||||||
public long DoSQLInsert(JToken jsonbody, ToolType toolType, List<ToolTypeMetadata> metaData)
|
public long DoSQLInsert(JToken jsonbody, ToolType toolType, List<ToolTypeMetadata> metaData)
|
||||||
{
|
{
|
||||||
@ -37,11 +39,11 @@ public class InboundDataService : IInboundDataService
|
|||||||
|
|
||||||
long headerId = 0;
|
long headerId = 0;
|
||||||
|
|
||||||
using (System.Transactions.TransactionScope transScope = _Repo.StartTransaction())
|
using (System.Transactions.TransactionScope transScope = _MetrologyRepository.StartTransaction())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_Repo.PurgeExistingData(toolType.ID, uniqueId);
|
_MetrologyRepository.PurgeExistingData(toolType.ID, uniqueId);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -50,7 +52,7 @@ public class InboundDataService : IInboundDataService
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
headerId = _Repo.InsertToolDataJSON(jsonbody, -1, metaData, toolType.HeaderTableName);
|
headerId = _MetrologyRepository.InsertToolDataJSON(jsonbody, -1, metaData, toolType.HeaderTableName);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -60,11 +62,11 @@ public class InboundDataService : IInboundDataService
|
|||||||
int detailrow = 1;
|
int detailrow = 1;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (detailsArray != null)
|
if (detailsArray is not null)
|
||||||
{
|
{
|
||||||
foreach (JToken detail in detailsArray)
|
foreach (JToken detail in detailsArray)
|
||||||
{
|
{
|
||||||
_ = _Repo.InsertToolDataJSON(detail, headerId, metaData, toolType.DataTableName);
|
_ = _MetrologyRepository.InsertToolDataJSON(detail, headerId, metaData, toolType.DataTableName);
|
||||||
detailrow += 1;
|
detailrow += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,7 +135,7 @@ public class InboundDataService : IInboundDataService
|
|||||||
|
|
||||||
if (jp.First is JArray array)
|
if (jp.First is JArray array)
|
||||||
detailsArray = array;
|
detailsArray = array;
|
||||||
else if ((jp.First is JValue value) && (value.Value == null))
|
else if ((jp.First is JValue value) && (value.Value is null))
|
||||||
detailsArray = null;
|
detailsArray = null;
|
||||||
else
|
else
|
||||||
errors.Add("Invalid details field");
|
errors.Add("Invalid details field");
|
||||||
@ -169,7 +171,7 @@ public class InboundDataService : IInboundDataService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if a Details container if found, process it by recursion
|
// if a Details container if found, process it by recursion
|
||||||
if (detailsArray != null)
|
if (detailsArray is not null)
|
||||||
{
|
{
|
||||||
int i = 1;
|
int i = 1;
|
||||||
foreach (JToken detail in detailsArray)
|
foreach (JToken detail in detailsArray)
|
||||||
@ -189,7 +191,7 @@ public class InboundDataService : IInboundDataService
|
|||||||
{
|
{
|
||||||
// get the json data for this container field, ex: Points
|
// get the json data for this container field, ex: Points
|
||||||
JProperty contJP = jsonbody.Children<JProperty>().Where(jp => string.Equals(jp.Name, containerField, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();
|
JProperty contJP = jsonbody.Children<JProperty>().Where(jp => string.Equals(jp.Name, containerField, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();
|
||||||
if ((contJP != null) && (contJP.Value is JArray array))
|
if ((contJP is not null) && (contJP.Value is JArray array))
|
||||||
{
|
{
|
||||||
JArray contJPArray = array;
|
JArray contJPArray = array;
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@
|
|||||||
<li>@Html.ActionLink("Export", "Index", "Export", new { area = "" }, null)</li>
|
<li>@Html.ActionLink("Export", "Index", "Export", new { area = "" }, null)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p class="navbar-text navbar-right">
|
<p class="navbar-text navbar-right">
|
||||||
@User.Identity.Name
|
@User.Identity?.Name
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
"ApiLoggingContentTypes": "application/json",
|
"ApiLoggingContentTypes": "application/json",
|
||||||
"ApiLoggingPathPrefixes": "/api/inbound",
|
"ApiLoggingPathPrefixes": "/api/inbound",
|
||||||
"ApiLogPath": "D:\\Metrology\\MetrologyAPILogs",
|
"ApiLogPath": "D:\\Metrology\\MetrologyAPILogs",
|
||||||
"AttachmentPath": "\\\\messv02ecc1.ec.local\\EC_Metrology_Si\\MetrologyAttachments",
|
"AttachmentPath": "\\\\mesfs.infineon.com\\EC_Metrology_Si\\MetrologyAttachments",
|
||||||
"BuildNumber": "1",
|
"BuildNumber": "1",
|
||||||
"Company": "Infineon Technologies Americas Corp.",
|
"Company": "Infineon Technologies Americas Corp.",
|
||||||
"ConnectionString": "Data Source=messv01ec.ec.local\\PROD1,53959;Integrated Security=True;Initial Catalog=Metrology_Archive;",
|
"ConnectionString": "Data Source=messqlec1.infineon.com\\PROD1,53959;Integrated Security=True;Initial Catalog=Metrology_Archive;",
|
||||||
"GitCommitSeven": "1234567",
|
"GitCommitSeven": "1234567",
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
@ -19,7 +19,7 @@
|
|||||||
"InboundApiAllowedIPList": "",
|
"InboundApiAllowedIPList": "",
|
||||||
"MonAResource": "OI_Metrology_Archive_IFX",
|
"MonAResource": "OI_Metrology_Archive_IFX",
|
||||||
"MonASite": "auc",
|
"MonASite": "auc",
|
||||||
"Oi2SqlConnectionString": "Data Source=messv01ec.ec.local\\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;",
|
"Oi2SqlConnectionString": "Data Source=messqlec1.infineon.com\\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;",
|
||||||
"OIExportPath": "\\\\openinsight-db-srv.na.infineon.com\\apps\\Metrology\\Data",
|
"OIExportPath": "\\\\openinsight-db-srv.na.infineon.com\\apps\\Metrology\\Data",
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"Using": [
|
"Using": [
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
"ApiLoggingContentTypes": "application/json",
|
"ApiLoggingContentTypes": "application/json",
|
||||||
"ApiLoggingPathPrefixes": "/api/inbound",
|
"ApiLoggingPathPrefixes": "/api/inbound",
|
||||||
"ApiLogPath": "D:\\Metrology\\MetrologyAPILogs",
|
"ApiLogPath": "D:\\Metrology\\MetrologyAPILogs",
|
||||||
"AttachmentPath": "\\\\messv02ecc1.ec.local\\EC_Metrology_Si\\MetrologyAttachments",
|
"AttachmentPath": "\\\\mesfs.infineon.com\\EC_Metrology_Si\\MetrologyAttachments",
|
||||||
"BuildNumber": "1",
|
"BuildNumber": "1",
|
||||||
"Company": "Infineon Technologies Americas Corp.",
|
"Company": "Infineon Technologies Americas Corp.",
|
||||||
"ConnectionString": "Data Source=messv01ec.ec.local\\PROD1,53959;Integrated Security=True;Initial Catalog=Metrology_Archive;",
|
"ConnectionString": "Data Source=messqlec1.infineon.com\\PROD1,53959;Integrated Security=True;Initial Catalog=Metrology_Archive;",
|
||||||
"GitCommitSeven": "1234567",
|
"GitCommitSeven": "1234567",
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
@ -19,7 +19,7 @@
|
|||||||
"InboundApiAllowedIPList": "",
|
"InboundApiAllowedIPList": "",
|
||||||
"MonAResource": "OI_Metrology_Archive_EC",
|
"MonAResource": "OI_Metrology_Archive_EC",
|
||||||
"MonASite": "auc",
|
"MonASite": "auc",
|
||||||
"Oi2SqlConnectionString": "Data Source=messv01ec.ec.local\\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;",
|
"Oi2SqlConnectionString": "Data Source=messqlec1.infineon.com\\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;",
|
||||||
"OIExportPath": "\\\\openinsight-db-srv.na.infineon.com\\apps\\Metrology\\Data",
|
"OIExportPath": "\\\\openinsight-db-srv.na.infineon.com\\apps\\Metrology\\Data",
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"Using": [
|
"Using": [
|
||||||
|
266
Jenkinsfile
vendored
266
Jenkinsfile
vendored
@ -1,266 +0,0 @@
|
|||||||
#!/usr/bin/env groovy
|
|
||||||
/* groovylint-disable CompileStatic, ConsecutiveStringConcatenation, DuplicateNumberLiteral, DuplicateStringLiteral, LineLength, NestedBlockDepth, NoDef, VariableTypeRequired */
|
|
||||||
import groovy.transform.Field
|
|
||||||
|
|
||||||
@Field String _DDrive = 'D:/'
|
|
||||||
@Field String _ExePath = '...'
|
|
||||||
@Field String _NGINXFile = '...'
|
|
||||||
@Field String _PortNumber = '...'
|
|
||||||
@Field String _AssemblyName = '...'
|
|
||||||
@Field String _AgentDevelopment = ''
|
|
||||||
@Field String _NetVersion = 'net6.0'
|
|
||||||
@Field String _GitCommitSeven = '...'
|
|
||||||
@Field String _TargetLocation = '...'
|
|
||||||
@Field String _FirstBeforePlus = '5000'
|
|
||||||
@Field String _GitName = 'OI-Metrology'
|
|
||||||
@Field String _MonARessource = 'OI_Metrology'
|
|
||||||
@Field String _WorkingDirectoryName = 'IFXApps'
|
|
||||||
@Field String _DDriveNet = "${_DDrive}${_NetVersion}"
|
|
||||||
@Field String _AgentStaging = 'messa010ec-ecfisysadmin'
|
|
||||||
@Field String _AgentProduction = 'messa010ec-ecfisysadmin'
|
|
||||||
@Field String _CredentialsId = 'Metrology-Username-Password'
|
|
||||||
@Field String _Company = 'Infineon Technologies Americas Corp.'
|
|
||||||
@Field String _ProgramFilesDotnet = 'C:/program files/dotnet/dotnet.exe'
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
label env.JENKINS_ENVIRONMENT == 'Development' ? _AgentDevelopment : env.JENKINS_ENVIRONMENT == 'Staging' ? _AgentStaging : env.JENKINS_ENVIRONMENT == 'Production' ? _AgentProduction : 'Else'
|
|
||||||
}
|
|
||||||
parameters {
|
|
||||||
string(name: 'MONA_SUFFIX', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? '_IFX' : '_EC', description: 'MonA Suffix')
|
|
||||||
string(name: 'GIT_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'mestsa003.infineon.com' : 'mestsa07ec.ec.local', description: 'git server')
|
|
||||||
string(name: 'DEFAULT_FILE_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'messv02ecc1_ec_local' : 'messv02ecc1.ec.local', description: 'Default file server...')
|
|
||||||
string(name: 'PROJECT_DIRECTORY', defaultValue: 'Archive', description: 'Archive|Viewer')
|
|
||||||
}
|
|
||||||
stages {
|
|
||||||
// stage('Git') {
|
|
||||||
// steps {
|
|
||||||
// bat(returnStatus: true, script: 'git init')
|
|
||||||
// bat(returnStatus: true, script: 'git remote add origin \\\\' + params.GIT_SERVER + '\\Git\\' + _GitName + '.git')
|
|
||||||
// bat(returnStatus: true, script: 'git pull origin master')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
stage('Setup') {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
_AssemblyName = "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}"
|
|
||||||
// _GitCommitSeven = '1234567'
|
|
||||||
_GitCommitSeven = env.GIT_COMMIT.substring(0, 7)
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
def files = findFiles(glob: '*.csproj')
|
|
||||||
if (files.length != 1) {
|
|
||||||
error("Build failed because couldn't find a *.csproj file")
|
|
||||||
}
|
|
||||||
echo """
|
|
||||||
${files[0].name}
|
|
||||||
${files[0].path}
|
|
||||||
${files[0].directory}
|
|
||||||
${files[0].length}
|
|
||||||
${files[0].lastModified}
|
|
||||||
"""
|
|
||||||
_AssemblyName = files[0].name.split('[.]csproj')[0]
|
|
||||||
}
|
|
||||||
_TargetLocation = "\\\\${params.DEFAULT_FILE_SERVER}\\EC_EAFRepository\\${env.JENKINS_ENVIRONMENT}\\DeploymentStorage\\Adaptation_${_AssemblyName}"
|
|
||||||
withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) {
|
|
||||||
dir("C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1/conf/includes") {
|
|
||||||
_NGINXFile = "C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1/conf/includes/${_AssemblyName}.conf"
|
|
||||||
def files = findFiles(glob: "${_AssemblyName}.conf")
|
|
||||||
if (files.length != 1) {
|
|
||||||
writeFile(file: _NGINXFile, text: "location / { proxy_pass http://localhost:${_FirstBeforePlus}; }")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Read NGINX') {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
String text = readFile(file: _NGINXFile)
|
|
||||||
String check = text == null ? _FirstBeforePlus : text.split(';')[0]
|
|
||||||
String[] segments = check.split(':')
|
|
||||||
if (segments.length != 3) {
|
|
||||||
_PortNumber = check
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_PortNumber = (segments[2].toInteger() + 2).toString()
|
|
||||||
}
|
|
||||||
_ExePath = "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}/${_AssemblyName}.exe"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Info') {
|
|
||||||
steps {
|
|
||||||
// echo "GIT_URL_N - ${env.GIT_URL_N}"
|
|
||||||
// echo "BRANCH_NAME ${env.BRANCH_NAME}"
|
|
||||||
// echo "DEPLOY_VERSION ${env.DEPLOY_VERSION}"
|
|
||||||
// echo "GIT_AUTHOR_NAME ${env.GIT_AUTHOR_NAME}"
|
|
||||||
// echo "GIT_LOCAL_BRANCH ${env.GIT_LOCAL_BRANCH}"
|
|
||||||
// echo "GIT_COMMITTER_EMAIL ${env.GIT_COMMITTER_EMAIL}"
|
|
||||||
// echo "GIT_PREVIOUS_COMMIT ${env.GIT_PREVIOUS_COMMIT}"
|
|
||||||
// echo "GIT_PREVIOUS_SUCCESSFUL_COMMIT ${env.GIT_PREVIOUS_SUCCESSFUL_COMMIT}"
|
|
||||||
echo "_AssemblyName ${_AssemblyName}" // ...
|
|
||||||
echo "_ExePath ${_ExePath}" // ...
|
|
||||||
echo "_PortNumber ${_PortNumber}" // ...
|
|
||||||
echo "BUILD_NUMBER ${env.BUILD_NUMBER}" // 11
|
|
||||||
echo "DEFAULT_FILE_SERVER ${params.DEFAULT_FILE_SERVER}" // 11
|
|
||||||
echo "GIT_BRANCH ${env.GIT_BRANCH}" // origin/master
|
|
||||||
echo "GIT_COMMIT ${env.GIT_COMMIT}" // 73b814069f2cf0173a62a8228815a9bc9ba93c41
|
|
||||||
echo "GIT_SERVER ${params.GIT_SERVER}" // ...
|
|
||||||
echo "GIT_URL ${env.GIT_URL}" // D:\ProgramData\Git\....git
|
|
||||||
echo "JENKINS_ENVIRONMENT ${env.JENKINS_ENVIRONMENT}" // 11
|
|
||||||
echo "JENKINS_URL ${env.JENKINS_URL}" // http://localhost:8080/
|
|
||||||
echo "JOB_NAME ${env.JOB_NAME}" // ...
|
|
||||||
echo "PROJECT_DIRECTORY ${env.PROJECT_DIRECTORY}" // ...
|
|
||||||
echo "WORKSPACE ${env.WORKSPACE}" // D:\.jenkins\_\...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// stage('Restore') {
|
|
||||||
// steps {
|
|
||||||
// bat(returnStatus: true, script: 'dotnet --info')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
stage('Safe storage of app secrets') {
|
|
||||||
steps {
|
|
||||||
withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) {
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets init')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "Company" "' + _Company + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "ServiceUser" "' + username + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "BuildNumber" "' + env.BUILD_NUMBER + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "GitCommitSeven" "' + _GitCommitSeven + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "Server" "' + params.DEFAULT_FILE_SERVER + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "URLs" "' + 'http://localhost:' + _PortNumber)
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "WorkingDirectoryName" "' + _WorkingDirectoryName + '"')
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'user-secrets set "MonARessource" "' + _MonARessource + '_' + env.PROJECT_DIRECTORY + env.MONA_SUFFIX + '"')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// stage('Core Build (packagemanagement.eu.infineon.com)') {
|
|
||||||
// steps {
|
|
||||||
// echo "Build number is ${currentBuild.number}"
|
|
||||||
// dir(env.PROJECT_DIRECTORY) {
|
|
||||||
// bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
// 'build --runtime win-x64 --self-contained --verbosity quiet --source ' +
|
|
||||||
// 'https://packagemanagement.eu.infineon.com:4430/api/v2/')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
stage('Core Build') {
|
|
||||||
steps {
|
|
||||||
echo "Build number is ${currentBuild.number}"
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'build --runtime win-x64 --self-contained --verbosity quiet')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Commit Id') {
|
|
||||||
steps {
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
writeFile(file: 'bin/Debug/' + _NetVersion + "/win-x64/${env.GIT_COMMIT}-${env.BUILD_NUMBER}.txt", text: "${env.GIT_URL}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// stage('Test') {
|
|
||||||
// options {
|
|
||||||
// timeout(time: 10, unit: 'MINUTES')
|
|
||||||
// }
|
|
||||||
// steps {
|
|
||||||
// dir(env.PROJECT_DIRECTORY) {
|
|
||||||
// bat('dotnet --info')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// stage('Version') {
|
|
||||||
// steps {
|
|
||||||
// bat('dotnet --info')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
stage('Package') {
|
|
||||||
steps {
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
fileOperations([fileZipOperation(folderPath: 'bin/Debug/' + _NetVersion + '/win-x64', outputFolderPath: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-Debug")])
|
|
||||||
fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*", renameFiles: false, sourceCaptureExpression: '', targetLocation: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-Debug", targetNameExpression: '')])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Publish') {
|
|
||||||
steps {
|
|
||||||
dir(env.PROJECT_DIRECTORY) {
|
|
||||||
bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' +
|
|
||||||
'publish --configuration Release --runtime win-x64 --verbosity quiet ' +
|
|
||||||
"--self-contained true --p:Version=6.0.202-${_GitCommitSeven}-${env.BUILD_NUMBER} -o " +
|
|
||||||
'"' + "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}" + '"')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Service') {
|
|
||||||
steps {
|
|
||||||
withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) {
|
|
||||||
bat(returnStatus: true, script: 'sc create "' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '" ' +
|
|
||||||
'start= delayed-auto DisplayName="' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '" ' +
|
|
||||||
'binPath= "' + _ExePath + '" ' +
|
|
||||||
'obj= "' + "${env.USERDOMAIN}\\${username}" + '" password= "' + password + '"')
|
|
||||||
bat(returnStatus: true, script: 'sc start "' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '"')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Upadate NGINX') {
|
|
||||||
steps {
|
|
||||||
writeFile(file: _NGINXFile, text: "location / { proxy_pass http://localhost:${_PortNumber}; }")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('NGINX Test and Reload') {
|
|
||||||
steps {
|
|
||||||
withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) {
|
|
||||||
dir("C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1") {
|
|
||||||
script {
|
|
||||||
int returnStatus = bat(returnStatus: true, script: 'nginx.exe -t')
|
|
||||||
println("returnStatus ################ ${returnStatus} ####################")
|
|
||||||
if (returnStatus == 0) {
|
|
||||||
bat(returnStatus: true, script: 'nginx.exe -s reload')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// stage('Force Fail') {
|
|
||||||
// steps {
|
|
||||||
// error("Build failed because of this and that..")
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// stage('Copy Files to: file-share') {
|
|
||||||
// steps {
|
|
||||||
// dir(env.PROJECT_DIRECTORY + '/bin/Debug/' + _NetVersion + '/win-x64') {
|
|
||||||
// fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.txt", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
|
|
||||||
// fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.dll", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
|
|
||||||
// fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.exe", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
|
|
||||||
// fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.pdb", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')])
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
dir(env.PROJECT_DIRECTORY + '/bin') {
|
|
||||||
deleteDir()
|
|
||||||
}
|
|
||||||
dir(env.PROJECT_DIRECTORY + '/obj') {
|
|
||||||
deleteDir()
|
|
||||||
}
|
|
||||||
cleanWs()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,13 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 16
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 16.0.30114.105
|
VisualStudioVersion = 16.0.30114.105
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archive", "Archive\Archive.csproj", "{D02BA20E-0ACE-4D1C-9132-90773AF3CF5A}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archive", "Archive\OI.Metrology.Archive.csproj", "{D02BA20E-0ACE-4D1C-9132-90773AF3CF5A}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\Shared.csproj", "{A807EAE3-7DCB-4E5E-BE54-0D7410D18B3E}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\OI.Metrology.Shared.csproj", "{A807EAE3-7DCB-4E5E-BE54-0D7410D18B3E}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Viewer", "Viewer\Viewer.csproj", "{25C86DF8-EC1A-4D4B-AD4E-6561174824B9}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "Server\OI.Metrology.Server.csproj", "{25C86DF8-EC1A-4D4B-AD4E-6561174824B9}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{B67FB8C4-402E-4D53-90A6-90F6FDB9D082}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\OI.Metrology.Tests.csproj", "{B67FB8C4-402E-4D53-90A6-90F6FDB9D082}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
1
Server/.vscode/format-report.json
vendored
Normal file
1
Server/.vscode/format-report.json
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
[]
|
@ -10,14 +10,15 @@
|
|||||||
"request": "launch",
|
"request": "launch",
|
||||||
"preLaunchTask": "build",
|
"preLaunchTask": "build",
|
||||||
// If you have changed target frameworks, make sure to update the program path.
|
// If you have changed target frameworks, make sure to update the program path.
|
||||||
"program": "${workspaceFolder}/bin/Debug/net6.0/win-x64/Archive.dll",
|
"program": "${workspaceFolder}/bin/Debug/net7.0/win-x64/OI.Metrology.Server.dll",
|
||||||
"args": [],
|
"args": [],
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}",
|
||||||
"stopAtEntry": false,
|
"stopAtEntry": false,
|
||||||
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
|
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
|
||||||
"serverReadyAction": {
|
"serverReadyAction": {
|
||||||
"action": "openExternally",
|
"action": "openExternally",
|
||||||
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
|
"pattern": "\\bNow listening on:\\s+(https?://\\S+)",
|
||||||
|
"uriFormat": "%s/swagger/index.html"
|
||||||
},
|
},
|
||||||
"env": {
|
"env": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
@ -30,7 +31,8 @@
|
|||||||
"name": ".NET Core Attach",
|
"name": ".NET Core Attach",
|
||||||
"type": "coreclr",
|
"type": "coreclr",
|
||||||
"request": "attach",
|
"request": "attach",
|
||||||
"processName": "Archive"
|
"preLaunchTask": "watch",
|
||||||
|
"processName": "OI.Metrology.Server.exe"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
81
Server/.vscode/tasks.json
vendored
Normal file
81
Server/.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
{
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "build",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"build",
|
||||||
|
"${workspaceFolder}/OI.Metrology.Server.csproj",
|
||||||
|
"/property:GenerateFullPaths=true",
|
||||||
|
"/consoleloggerparameters:NoSummary"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "publish",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"publish",
|
||||||
|
"${workspaceFolder}/OI.Metrology.Server.csproj",
|
||||||
|
"/property:GenerateFullPaths=true",
|
||||||
|
"/consoleloggerparameters:NoSummary"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "old-watch",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"watch",
|
||||||
|
"run",
|
||||||
|
"--project",
|
||||||
|
"${workspaceFolder}/OI.Metrology.Server.csproj"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "watch",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"watch",
|
||||||
|
"--launch-profile",
|
||||||
|
"http",
|
||||||
|
"run",
|
||||||
|
"--project",
|
||||||
|
"${workspaceFolder}/OI.Metrology.Server.csproj",
|
||||||
|
"--verbose"
|
||||||
|
],
|
||||||
|
"isBackground": true,
|
||||||
|
"dependsOn": [
|
||||||
|
"build"
|
||||||
|
],
|
||||||
|
"problemMatcher": {
|
||||||
|
"fileLocation": "relative",
|
||||||
|
"pattern": {
|
||||||
|
"regexp": "^([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$",
|
||||||
|
"file": 1,
|
||||||
|
"location": 2,
|
||||||
|
"severity": 3,
|
||||||
|
"code": 4,
|
||||||
|
"message": 5
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"activeOnStart": true,
|
||||||
|
"beginsPattern": "^.*Shutdown requested.*",
|
||||||
|
"endsPattern": "^.*Application started.*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "File-Folder-Helper AOT s V Repositories",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s V Repositories",
|
||||||
|
"problemMatcher": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
23
Server/ApiControllers/AppSettingsController.cs
Normal file
23
Server/ApiControllers/AppSettingsController.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
[ApiController]
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class AppSettingsController : ControllerBase, IAppSettingsController<ActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IAppSettingsRepository<Models.Binder.AppSettings> _AppSettingsRepository;
|
||||||
|
|
||||||
|
public AppSettingsController(IAppSettingsRepository<Models.Binder.AppSettings> AppSettingsRepository) => _AppSettingsRepository = AppSettingsRepository;
|
||||||
|
|
||||||
|
[HttpGet(nameof(IAppSettingsController<ActionResult>.Action.App))]
|
||||||
|
public ActionResult GetAppSettings() =>
|
||||||
|
Ok(_AppSettingsRepository.GetAppSettings());
|
||||||
|
|
||||||
|
[HttpGet(nameof(IAppSettingsController<ActionResult>.Action.DevOps))]
|
||||||
|
public ActionResult GetBuildNumberAndGitCommitSeven() =>
|
||||||
|
Ok(_AppSettingsRepository.GetBuildNumberAndGitCommitSeven());
|
||||||
|
|
||||||
|
}
|
@ -1,50 +1,39 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using OI.Metrology.Shared.DataModels;
|
using OI.Metrology.Shared.DataModels;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.Services;
|
using OI.Metrology.Shared.Services;
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace OI.Metrology.Viewer.ApiControllers;
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
public class AttachmentsController : Controller
|
public class AttachmentsController : Controller
|
||||||
{
|
{
|
||||||
private readonly IMetrologyRepo _Repo;
|
|
||||||
private readonly IAttachmentsService _AttachmentsService;
|
|
||||||
|
|
||||||
public AttachmentsController(IMetrologyRepo repo, IAttachmentsService attachmentsService)
|
private readonly IAttachmentsService _AttachmentsService;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
|
public AttachmentsController(IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService)
|
||||||
{
|
{
|
||||||
_Repo = repo;
|
|
||||||
_AttachmentsService = attachmentsService;
|
_AttachmentsService = attachmentsService;
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
// this endpoint was created in hope that it would make retrieving attachments to display in OpenInsight easier
|
// this endpoint was created in hope that it would make retrieving attachments to display in OpenInsight easier
|
||||||
// url would be like /api/attachments/mercuryprobe/header/HgProbe_66-232268-4329_20180620052640032/data.pdf
|
// url would be like /api/attachments/mercuryprobe/header/HgProbe_66-232268-4329_20180620052640032/data.pdf
|
||||||
|
|
||||||
[HttpGet("/api/attachments/{toolTypeName}/{tabletype}/{title}/{filename}")]
|
[HttpGet("/api/attachments/{toolTypeName}/{tabletype}/{title}/{filename}")]
|
||||||
public IActionResult GetAttachment(
|
public IActionResult GetAttachment(string toolTypeName, string tabletype, string title, string filename)
|
||||||
string toolTypeName,
|
|
||||||
string tabletype,
|
|
||||||
string title,
|
|
||||||
string filename)
|
|
||||||
{
|
{
|
||||||
ToolType tt = _Repo.GetToolTypeByName(toolTypeName);
|
ToolType tt = _MetrologyRepository.GetToolTypeByName(toolTypeName);
|
||||||
|
|
||||||
bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
|
bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string contenttype = "application/pdf";
|
string contenttype = "application/pdf";
|
||||||
if (filename.ToLower().TrimEnd().EndsWith(".txt"))
|
if (filename.ToLower().TrimEnd().EndsWith(".txt"))
|
||||||
contenttype = "text/plain";
|
contenttype = "text/plain";
|
||||||
|
|
||||||
Stream fs = _AttachmentsService.GetAttachmentStreamByTitle(tt, header, title, filename);
|
Stream fs = _AttachmentsService.GetAttachmentStreamByTitle(tt, header, title, filename);
|
||||||
return File(fs, contenttype);
|
return File(fs, contenttype);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex) { return Content(ex.Message); }
|
||||||
{
|
|
||||||
return Content(ex.Message);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,37 +1,31 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace OI.Metrology.Viewer.ApiContollers;
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
|
||||||
// this controller is for the Awaiting Dispo functionality
|
// this controller is for the Awaiting Dispo functionality
|
||||||
|
|
||||||
public class AwaitingDispoController : Controller
|
[Route("api/[controller]")]
|
||||||
|
public class AwaitingDispoController : Controller, IAwaitingDispoController<IActionResult>
|
||||||
{
|
{
|
||||||
private readonly IMetrologyRepo _Repo;
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
public AwaitingDispoController(IMetrologyRepository metrologyRepository) =>
|
||||||
public AwaitingDispoController(IMetrologyRepo repo) => _Repo = repo;
|
_MetrologyRepository = metrologyRepository;
|
||||||
|
|
||||||
// returns the data to show in the Awaiting Dispo grid
|
// returns the data to show in the Awaiting Dispo grid
|
||||||
// marked no-cache, just-in-case since igniteUI automatically adds a query string parameter to prevent caching
|
// marked no-cache, just-in-case since igniteUI automatically adds a query string parameter to prevent caching
|
||||||
[HttpGet("/api/awaitingdispo")]
|
[HttpGet]
|
||||||
[ResponseCache(NoStore = true)]
|
[ResponseCache(NoStore = true)]
|
||||||
public IActionResult Index()
|
public IActionResult Index() =>
|
||||||
{
|
Json(_MetrologyRepository.GetAwaitingDisposition(), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
var r = new
|
|
||||||
{
|
|
||||||
Results = _Repo.GetAwaitingDispo()
|
|
||||||
};
|
|
||||||
return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
|
||||||
}
|
|
||||||
|
|
||||||
// this endpoint is used to set the ReviewDate column, causing the header to no longer show in Awaiting Dispo
|
// this endpoint is used to set the ReviewDate column, causing the header to no longer show in Awaiting Dispo
|
||||||
[HttpPost("/api/awaitingdispo/markasreviewed")]
|
[HttpPost("/api/awaitingdispo/markasreviewed")]
|
||||||
public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid)
|
public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid)
|
||||||
{
|
{
|
||||||
_ = _Repo.UpdateReviewDate(tooltypeid, headerid, false);
|
_ = _MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, false);
|
||||||
return Ok();
|
return Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +33,7 @@ public class AwaitingDispoController : Controller
|
|||||||
[HttpPost("/api/awaitingdispo/markasawaiting")]
|
[HttpPost("/api/awaitingdispo/markasawaiting")]
|
||||||
public IActionResult MarkAsAwaiting([FromQuery] long headerid, [FromQuery] int tooltypeid)
|
public IActionResult MarkAsAwaiting([FromQuery] long headerid, [FromQuery] int tooltypeid)
|
||||||
{
|
{
|
||||||
if (_Repo.UpdateReviewDate(tooltypeid, headerid, true) <= 1)
|
if (_MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, true) <= 1)
|
||||||
return Ok();
|
return Ok();
|
||||||
else
|
else
|
||||||
return StatusCode(444);
|
return StatusCode(444);
|
29
Server/ApiControllers/ClientSettingsController.cs
Normal file
29
Server/ApiControllers/ClientSettingsController.cs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
[ApiController]
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class ClientSettingsController : ControllerBase, IClientSettingsController<ActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IClientSettingsRepository _ClientSettingsRepository;
|
||||||
|
|
||||||
|
public ClientSettingsController(IClientSettingsRepository clientSettingsRepository) => _ClientSettingsRepository = clientSettingsRepository;
|
||||||
|
|
||||||
|
[HttpGet(nameof(IClientSettingsController<ActionResult>.Action.Client))]
|
||||||
|
public ActionResult GetClientSettings()
|
||||||
|
{
|
||||||
|
List<string> results = _ClientSettingsRepository.GetClientSettings(Request.HttpContext.Connection?.RemoteIpAddress);
|
||||||
|
return Ok(results);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet(nameof(IClientSettingsController<ActionResult>.Action.IP))]
|
||||||
|
public ActionResult GetIpAddress()
|
||||||
|
{
|
||||||
|
string result = _ClientSettingsRepository.GetIpAddress(Request.HttpContext.Connection?.RemoteIpAddress);
|
||||||
|
return Ok(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
82
Server/ApiControllers/ExportController.cs
Normal file
82
Server/ApiControllers/ExportController.cs
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
using OI.Metrology.Shared.DataModels;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class ExportController : Controller, IExportController<IActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IExportRepository _ExportRepository;
|
||||||
|
|
||||||
|
public ExportController(IExportRepository exportRepository) =>
|
||||||
|
_ExportRepository = exportRepository;
|
||||||
|
|
||||||
|
private static string? GetJson(Stream stream)
|
||||||
|
{
|
||||||
|
string? result;
|
||||||
|
if (!stream.CanRead)
|
||||||
|
result = null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Task<string> task = new StreamReader(stream).ReadToEndAsync();
|
||||||
|
result = task.Result;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HeaderCommon GetHeaderCommon(Stream stream)
|
||||||
|
{
|
||||||
|
HeaderCommon? result;
|
||||||
|
string? json = GetJson(stream);
|
||||||
|
result = string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize<HeaderCommon>(json);
|
||||||
|
result ??= new();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("export")]
|
||||||
|
public IActionResult GetExport() =>
|
||||||
|
Content(_ExportRepository.GetExport(GetHeaderCommon(Request.Body)));
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("headers")]
|
||||||
|
public IActionResult GetHeaders() =>
|
||||||
|
Json(_ExportRepository.GetHeaders(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("logistics")]
|
||||||
|
public IActionResult GetLogistics() =>
|
||||||
|
Json(_ExportRepository.GetLogistics(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("pdsf")]
|
||||||
|
[Route("processDataStandardFormat")]
|
||||||
|
public IActionResult GetProcessDataStandardFormat() =>
|
||||||
|
Content(_ExportRepository.GetProcessDataStandardFormat(GetHeaderCommon(Request.Body)));
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("export")]
|
||||||
|
public IActionResult PostExport() =>
|
||||||
|
Content(_ExportRepository.GetExport(GetHeaderCommon(Request.Body)));
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("headers")]
|
||||||
|
public IActionResult PostHeaders() =>
|
||||||
|
Json(_ExportRepository.GetHeaders(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("logistics")]
|
||||||
|
public IActionResult PostLogistics() =>
|
||||||
|
Json(_ExportRepository.GetLogistics(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("pdsf")]
|
||||||
|
[Route("processDataStandardFormat")]
|
||||||
|
public IActionResult PostProcessDataStandardFormat() =>
|
||||||
|
Content(_ExportRepository.GetProcessDataStandardFormat(GetHeaderCommon(Request.Body)));
|
||||||
|
|
||||||
|
}
|
91
Server/ApiControllers/InboundController.cs
Normal file
91
Server/ApiControllers/InboundController.cs
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using OI.Metrology.Server.Models;
|
||||||
|
using OI.Metrology.Shared.Models;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
using OI.Metrology.Shared.Services;
|
||||||
|
using System.Net;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
[ApiController]
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public partial class InboundController : ControllerBase, IInboundController<IActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly ILogger _Logger;
|
||||||
|
private readonly AppSettings _AppSettings;
|
||||||
|
private readonly IInboundRepository _InboundRepository;
|
||||||
|
private readonly IAttachmentsService _AttachmentsService;
|
||||||
|
private readonly IInboundDataService _InboundDataService;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
|
public InboundController(AppSettings appSettings, ILogger<InboundController> logger, IMetrologyRepository metrologyRepository, IInboundRepository inboundRepository, IInboundDataService inboundDataService, IAttachmentsService attachmentsService)
|
||||||
|
{
|
||||||
|
_Logger = logger;
|
||||||
|
_AppSettings = appSettings;
|
||||||
|
_InboundRepository = inboundRepository;
|
||||||
|
_AttachmentsService = attachmentsService;
|
||||||
|
_InboundDataService = inboundDataService;
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string? GetJson(Stream stream)
|
||||||
|
{
|
||||||
|
string? result;
|
||||||
|
if (!stream.CanRead)
|
||||||
|
result = null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Task<string> task = new StreamReader(stream).ReadToEndAsync();
|
||||||
|
result = task.Result;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("{tooltype}")]
|
||||||
|
public IActionResult Post(string tooltype)
|
||||||
|
{
|
||||||
|
IPAddress? remoteIP = HttpContext.Connection.RemoteIpAddress;
|
||||||
|
if (!_InboundRepository.IsIPAddressAllowed(_AppSettings.InboundApiAllowedIPList, remoteIP))
|
||||||
|
{
|
||||||
|
_Logger.LogInformation($"Rejected remote IP: {remoteIP}");
|
||||||
|
return Unauthorized("Remote IP is not on allowed list");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string? json = GetJson(Request.Body);
|
||||||
|
DataResponse dataResponse = _InboundRepository.Data(_MetrologyRepository, _InboundDataService, tooltype, json);
|
||||||
|
if (dataResponse.Errors.Count == 0)
|
||||||
|
return Ok(dataResponse);
|
||||||
|
else
|
||||||
|
return BadRequest(dataResponse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("{tooltype}/attachment")]
|
||||||
|
public IActionResult AttachFile(string tooltype, [FromQuery] long headerid, [FromQuery] string datauniqueid = "")
|
||||||
|
{
|
||||||
|
IPAddress? remoteIP = HttpContext.Connection.RemoteIpAddress;
|
||||||
|
if (!_InboundRepository.IsIPAddressAllowed(_AppSettings.InboundApiAllowedIPList, remoteIP))
|
||||||
|
{
|
||||||
|
_Logger.LogInformation($"Rejected remote IP: {remoteIP}");
|
||||||
|
return Unauthorized("Remote IP is not on allowed list");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Request.Form is null)
|
||||||
|
return BadRequest($"Invalid form");
|
||||||
|
if (Request.Form.Files.Count != 1)
|
||||||
|
return BadRequest($"Invalid file count");
|
||||||
|
IFormFile formFile = Request.Form.Files[0];
|
||||||
|
string? message = _InboundRepository.AttachFile(_MetrologyRepository, _AttachmentsService, tooltype, headerid, datauniqueid, formFile.FileName, formFile);
|
||||||
|
if (message is null)
|
||||||
|
return Ok();
|
||||||
|
else
|
||||||
|
return BadRequest(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
52
Server/ApiControllers/InfinityQSController.cs
Normal file
52
Server/ApiControllers/InfinityQSController.cs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
using OI.Metrology.Shared.DataModels;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class InfinityQSController : Controller, IInfinityQSController<IActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IInfinityQSRepository _InfinityQSRepository;
|
||||||
|
|
||||||
|
public InfinityQSController(IInfinityQSRepository InfinityQSRepository) => _InfinityQSRepository = InfinityQSRepository;
|
||||||
|
|
||||||
|
[HttpGet("commandText")]
|
||||||
|
public IActionResult GetCommandText(string sub_group_id, string process, string job, string part, string lot, string date_time)
|
||||||
|
{
|
||||||
|
string commandText = _InfinityQSRepository.GetCommandText(sub_group_id, process, job, part, lot, date_time);
|
||||||
|
return Content(commandText, "text/plain; charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/data")]
|
||||||
|
public IActionResult GetData(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSBase[]> result = _InfinityQSRepository.GetData(sub_group_id);
|
||||||
|
return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/descriptors")]
|
||||||
|
public IActionResult GetDescriptors(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSDescriptor[]> result = _InfinityQSRepository.GetDescriptors(sub_group_id);
|
||||||
|
return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/events")]
|
||||||
|
public IActionResult GetEvents(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSEvent[]> result = _InfinityQSRepository.GetEvents(sub_group_id);
|
||||||
|
return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/header")]
|
||||||
|
public IActionResult GetHeader(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSBase[]> result = _InfinityQSRepository.GetHeader(sub_group_id);
|
||||||
|
return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
52
Server/ApiControllers/InfinityQSV2Controller.cs
Normal file
52
Server/ApiControllers/InfinityQSV2Controller.cs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
using OI.Metrology.Shared.DataModels;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class InfinityQSV2Controller : Controller, IInfinityQSV2Controller<IActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IInfinityQSV2Repository _InfinityQSRepositoryV2;
|
||||||
|
|
||||||
|
public InfinityQSV2Controller(IInfinityQSV2Repository InfinityQSRepositoryV2) => _InfinityQSRepositoryV2 = InfinityQSRepositoryV2;
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/commandText")]
|
||||||
|
public IActionResult GetCommandText(string sub_group_id, string process, string job, string part, string lot, string date_time)
|
||||||
|
{
|
||||||
|
string commandText = _InfinityQSRepositoryV2.GetCommandText(sub_group_id, process, job, part, lot, date_time);
|
||||||
|
return Content(commandText, "text/plain; charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/data")]
|
||||||
|
public IActionResult GetData(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSBaseV2[]> result = _InfinityQSRepositoryV2.GetData(sub_group_id);
|
||||||
|
return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/descriptors")]
|
||||||
|
public IActionResult GetDescriptors(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSDescriptorV2[]> result = _InfinityQSRepositoryV2.GetDescriptors(sub_group_id);
|
||||||
|
return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/events")]
|
||||||
|
public IActionResult GetEvents(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSEventV2[]> result = _InfinityQSRepositoryV2.GetEvents(sub_group_id);
|
||||||
|
return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/header")]
|
||||||
|
public IActionResult GetHeader(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSBaseV2[]> result = _InfinityQSRepositoryV2.GetHeader(sub_group_id);
|
||||||
|
return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
62
Server/ApiControllers/InfinityQSV3Controller.cs
Normal file
62
Server/ApiControllers/InfinityQSV3Controller.cs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
using OI.Metrology.Shared.DataModels;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class InfinityQSV3Controller : Controller, IInfinityQSV3Controller<IActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IInfinityQSV3Repository _InfinityQSRepositoryV3;
|
||||||
|
|
||||||
|
public InfinityQSV3Controller(IInfinityQSV3Repository InfinityQSRepositoryV3) => _InfinityQSRepositoryV3 = InfinityQSRepositoryV3;
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/commandText")]
|
||||||
|
public IActionResult GetCommandText(string sub_group_id, string process, string job, string part, string lot, string date_time)
|
||||||
|
{
|
||||||
|
string commandText = _InfinityQSRepositoryV3.GetCommandText(sub_group_id, process, job, part, lot, date_time);
|
||||||
|
return Content(commandText, "text/plain; charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/data")]
|
||||||
|
public IActionResult GetData(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSV3[]> result = _InfinityQSRepositoryV3.GetData(sub_group_id);
|
||||||
|
string json = JsonSerializer.Serialize(result, ResultInfinityQSV3SourceGenerationContext.Default.ResultInfinityQSV3Array);
|
||||||
|
return Content(json, "application/json", System.Text.Encoding.UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/descriptors")]
|
||||||
|
public IActionResult GetDescriptors(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSDescriptorV3[]> result = _InfinityQSRepositoryV3.GetDescriptors(sub_group_id);
|
||||||
|
string json = JsonSerializer.Serialize(result, ResultInfinityQSDescriptorV3SourceGenerationContext.Default.ResultInfinityQSDescriptorV3Array);
|
||||||
|
return Content(json, "application/json", System.Text.Encoding.UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{sub_group_id}/header")]
|
||||||
|
public IActionResult GetHeader(string sub_group_id)
|
||||||
|
{
|
||||||
|
Result<InfinityQSV3[]> result = _InfinityQSRepositoryV3.GetHeader(sub_group_id);
|
||||||
|
string json = JsonSerializer.Serialize(result, ResultInfinityQSV3SourceGenerationContext.Default.ResultInfinityQSV3Array);
|
||||||
|
return Content(json, "application/json", System.Text.Encoding.UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{process}/product-data-average-sum-of-defects-process-mean-process-sigma")]
|
||||||
|
public IActionResult GetProductDataAverageSumOfDefectsProcessMeanProcessSigma(string process, string? recipe)
|
||||||
|
{
|
||||||
|
string result = _InfinityQSRepositoryV3.GetProductDataAverageSumOfDefectsProcessMeanProcessSigma(process, recipe);
|
||||||
|
return Content(result, "application/json", System.Text.Encoding.UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("epi-pro-temp-verification")]
|
||||||
|
public IActionResult GetEpiProTempVerification()
|
||||||
|
{
|
||||||
|
string result = _InfinityQSRepositoryV3.GetEpiProTempVerification();
|
||||||
|
return Content(result, "text/html", System.Text.Encoding.UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
Server/ApiControllers/OpenInsightV1Controller.cs
Normal file
24
Server/ApiControllers/OpenInsightV1Controller.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class OpenInsightV1Controller : Controller, IOpenInsightV1Controller<IActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IOpenInsightV1Repository _OpenInsightRepository;
|
||||||
|
|
||||||
|
public OpenInsightV1Controller(IOpenInsightV1Repository openInsightRepository) =>
|
||||||
|
_OpenInsightRepository = openInsightRepository;
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{rds}/tencor-run")]
|
||||||
|
public IActionResult GetTencorRun(string rds, string? insert_date, string? recipe)
|
||||||
|
{
|
||||||
|
string result = _OpenInsightRepository.GetTencorRun(rds, insert_date, recipe);
|
||||||
|
return Content(result, "application/json", System.Text.Encoding.UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
33
Server/ApiControllers/PinController.cs
Normal file
33
Server/ApiControllers/PinController.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class PinController : Controller, IPinController<IActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IPinRepository _PinRepository;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
|
public PinController(IMetrologyRepository metrologyRepository, IPinRepository pinRepository)
|
||||||
|
{
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
|
_PinRepository = pinRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost("{toolTypeId}/markAsPinned")]
|
||||||
|
public IActionResult MarkAsPinned(Shared.DataModels.HeaderCommon headerCommon)
|
||||||
|
{
|
||||||
|
_PinRepository.SetPinnedTable(headerCommon);
|
||||||
|
return Ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{toolTypeId}/pinned")]
|
||||||
|
public IActionResult GetPinnedTable(int toolTypeId, string? biorad_id = null, string? cde_id = null, string? rds = null) =>
|
||||||
|
Json(_PinRepository.GetPinnedTable(_MetrologyRepository, toolTypeId, biorad_id, cde_id, rds), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
|
}
|
24
Server/ApiControllers/ReactorsController.cs
Normal file
24
Server/ApiControllers/ReactorsController.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class ReactorsController : Controller, IReactorsController<IActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IReactorsRepository _ReactorsRepository;
|
||||||
|
|
||||||
|
public ReactorsController(IReactorsRepository reactorsRepository) =>
|
||||||
|
_ReactorsRepository = reactorsRepository;
|
||||||
|
|
||||||
|
[HttpGet("{even}")]
|
||||||
|
public IActionResult Get(bool even) =>
|
||||||
|
Json(even ? _ReactorsRepository.EvenReactors() : _ReactorsRepository.OddReactors(), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
|
[HttpPost()]
|
||||||
|
public IActionResult Post(Shared.DataModels.WorkMaterialOut workMaterialOut) =>
|
||||||
|
Ok(_ReactorsRepository.GetKey(workMaterialOut, save: true));
|
||||||
|
|
||||||
|
}
|
46
Server/ApiControllers/ServiceShopOrderController.cs
Normal file
46
Server/ApiControllers/ServiceShopOrderController.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
[ApiController]
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class ServiceShopOrderController : ControllerBase, IServiceShopOrderController<ActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IServiceShopOrderRepository _ServiceShopOrderRepository;
|
||||||
|
|
||||||
|
public ServiceShopOrderController(IServiceShopOrderRepository ServiceShopOrderRepository) => _ServiceShopOrderRepository = ServiceShopOrderRepository;
|
||||||
|
|
||||||
|
[HttpGet(nameof(IServiceShopOrderController<ActionResult>.Action.All))]
|
||||||
|
public async Task<ActionResult> GetAllServiceShopOrders()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Shared.ViewModels.ServiceShopOrder[] results = await _ServiceShopOrderRepository.GetAllServiceShopOrders();
|
||||||
|
return Ok(results);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
return StatusCode(StatusCodes.Status500InternalServerError,
|
||||||
|
"Error retrieving data from the database");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{id}")]
|
||||||
|
public async Task<ActionResult> GetServiceShopOrders(string id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Shared.ViewModels.ServiceShopOrder[] results = await _ServiceShopOrderRepository.GetServiceShopOrders(id);
|
||||||
|
return Ok(results);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
return StatusCode(StatusCodes.Status500InternalServerError,
|
||||||
|
"Error retrieving data from the database");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
using OI.Metrology.Shared.Services;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
[ApiController]
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public partial class SpreadingResistanceProfileController : ControllerBase, ISpreadingResistanceProfileController<IActionResult>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly IAttachmentsService _AttachmentsService;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
private readonly IToolTypesRepository _ToolTypesRepository;
|
||||||
|
private readonly ISpreadingResistanceProfileService _SpreadingResistanceProfileService;
|
||||||
|
|
||||||
|
public SpreadingResistanceProfileController(IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService, IToolTypesRepository toolTypesRepository, ISpreadingResistanceProfileService spreadingResistanceProfileService)
|
||||||
|
{
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
|
_AttachmentsService = attachmentsService;
|
||||||
|
_ToolTypesRepository = toolTypesRepository;
|
||||||
|
_SpreadingResistanceProfileService = spreadingResistanceProfileService;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{toolTypeId}/{tabletype}/files/{attachmentId}/{filename}")]
|
||||||
|
public IActionResult GetAttachment(int toolTypeId, string tabletype, string attachmentId, string filename)
|
||||||
|
{
|
||||||
|
(string? message, string? contenttype, Stream? stream) = _ToolTypesRepository.GetAttachment(_MetrologyRepository, _AttachmentsService, toolTypeId, tabletype, attachmentId, filename);
|
||||||
|
if (message is not null)
|
||||||
|
return Content(message);
|
||||||
|
else if (contenttype is not null && stream is not null)
|
||||||
|
return File(_SpreadingResistanceProfileService.GetImageBytes(stream), "image/jpeg");
|
||||||
|
else
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
110
Server/ApiControllers/ToolTypesController.cs
Normal file
110
Server/ApiControllers/ToolTypesController.cs
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.ApiControllers;
|
||||||
|
|
||||||
|
using OI.Metrology.Server.Models;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
using OI.Metrology.Shared.Services;
|
||||||
|
using System.Data;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
public class ToolTypesController : Controller, IToolTypesController<IActionResult>
|
||||||
|
{
|
||||||
|
// this controller powers the bulk of the UI
|
||||||
|
// it is named after the /api/tooltypes prefix
|
||||||
|
// the URL pattern is RESTful and the tool type is the root of every request
|
||||||
|
|
||||||
|
private readonly AppSettings _AppSettings;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepo;
|
||||||
|
private readonly IAttachmentsService _AttachmentsService;
|
||||||
|
private readonly IToolTypesRepository _ToolTypesRepository;
|
||||||
|
|
||||||
|
public ToolTypesController(AppSettings appSettings, IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService, IToolTypesRepository toolTypesRepository)
|
||||||
|
{
|
||||||
|
_AppSettings = appSettings;
|
||||||
|
_MetrologyRepo = metrologyRepository;
|
||||||
|
_AttachmentsService = attachmentsService;
|
||||||
|
_ToolTypesRepository = toolTypesRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult Index() =>
|
||||||
|
Json(_ToolTypesRepository.Index(_MetrologyRepo), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{id}")]
|
||||||
|
public IActionResult GetToolTypeMetadata(int id, string sortby = "") =>
|
||||||
|
Json(_ToolTypesRepository.GetToolTypeMetadata(_MetrologyRepo, id, sortby), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{id}/headers")]
|
||||||
|
public IActionResult GetHeaders(int id, [FromQuery] DateTime? datebegin, [FromQuery] DateTime? dateend, [FromQuery] int? page, [FromQuery] int? pagesize, [FromQuery] long? headerid)
|
||||||
|
{
|
||||||
|
Shared.DataModels.Result<DataTable> r = _ToolTypesRepository.GetHeaders(_MetrologyRepo, id, datebegin, dateend, page, pagesize, headerid);
|
||||||
|
string json = JsonConvert.SerializeObject(r);
|
||||||
|
return Content(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{id}/headertitles")]
|
||||||
|
public IActionResult GetHeaderTitles(int id, [FromQuery] int? page, [FromQuery] int? pagesize) =>
|
||||||
|
Json(_ToolTypesRepository.GetHeaderTitles(_MetrologyRepo, id, page, pagesize), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{id}/headers/{headerid}/fields")]
|
||||||
|
public IActionResult GetHeaderFields(int id, long headerid) =>
|
||||||
|
Json(_ToolTypesRepository.GetHeaderFields(_MetrologyRepo, id, headerid), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{id}/headers/{headerid}/data")]
|
||||||
|
public IActionResult GetData(int id, long headerid)
|
||||||
|
{
|
||||||
|
Shared.DataModels.Result<DataTable> r = _ToolTypesRepository.GetData(_MetrologyRepo, id, headerid);
|
||||||
|
string json = JsonConvert.SerializeObject(r);
|
||||||
|
return Content(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{toolTypeId}/export")]
|
||||||
|
public IActionResult GetExportData(int toolTypeId, [FromQuery] DateTime? datebegin, [FromQuery] DateTime? dateend)
|
||||||
|
{
|
||||||
|
Shared.DataModels.Result<DataTable> r = _ToolTypesRepository.GetExportData(_MetrologyRepo, toolTypeId, datebegin, dateend);
|
||||||
|
string json = JsonConvert.SerializeObject(r);
|
||||||
|
return Content(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{toolTypeId}/csv")]
|
||||||
|
public IActionResult GetCSVExport(int toolTypeId, [FromQuery] DateTime? datebegin, [FromQuery] DateTime? dateend, [FromQuery] string? filename)
|
||||||
|
{
|
||||||
|
byte[] r = _ToolTypesRepository.GetCSVExport(_MetrologyRepo, toolTypeId, datebegin, dateend);
|
||||||
|
return File(r, "application/octet-stream", filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{toolTypeId}/{tabletype}/files/{attachmentId}/{filename}")]
|
||||||
|
public IActionResult GetAttachment(int toolTypeId, string tabletype, string attachmentId, string filename)
|
||||||
|
{
|
||||||
|
(string? message, string? contenttype, Stream? stream) = _ToolTypesRepository.GetAttachment(_MetrologyRepo, _AttachmentsService, toolTypeId, tabletype, attachmentId, filename);
|
||||||
|
if (message is not null)
|
||||||
|
return Content(message);
|
||||||
|
else if (contenttype is not null && stream is not null)
|
||||||
|
return File(stream, contenttype);
|
||||||
|
else
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("{toolTypeId}/headers/{headerid}/oiexport")]
|
||||||
|
public IActionResult OIExport(int toolTypeId, long headerid)
|
||||||
|
{
|
||||||
|
string? message = _ToolTypesRepository.OIExport(_MetrologyRepo, _AttachmentsService, _AppSettings.AttachmentPath, _AppSettings.TableToPath, toolTypeId, headerid);
|
||||||
|
if (message is null)
|
||||||
|
return Ok(new { Message = "OK" });
|
||||||
|
else
|
||||||
|
return BadRequest(JsonConvert.SerializeObject(new { message }));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,13 +1,7 @@
|
|||||||
using Microsoft.AspNetCore.Builder;
|
using OI.Metrology.Server.Models;
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using OI.Metrology.Viewer.Models;
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace OI.Metrology.Viewer;
|
namespace OI.Metrology.Server;
|
||||||
|
|
||||||
// You may need to install the Microsoft.AspNetCore.Http.Abstractions package into your project
|
// You may need to install the Microsoft.AspNetCore.Http.Abstractions package into your project
|
||||||
public class ApiLoggingMiddleware
|
public class ApiLoggingMiddleware
|
||||||
@ -43,7 +37,8 @@ public class ApiLoggingMiddleware
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// if there are content type filters configured, only log is the request begins with one of them
|
// if there are content type filters configured, only log is the request begins with one of them
|
||||||
doLogging = _AppSettings.ApiLoggingContentTypes.Split(';').Any(ct => httpContext.Request.ContentType.StartsWith(ct));
|
string? contentType = httpContext.Request.ContentType;
|
||||||
|
doLogging = contentType is not null && _AppSettings.ApiLoggingContentTypes.Split(';').Any(ct => contentType.StartsWith(ct));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,7 @@
|
|||||||
using Microsoft.AspNetCore.Diagnostics;
|
using Microsoft.AspNetCore.Diagnostics;
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace OI.Metrology.Viewer.Controllers;
|
namespace OI.Metrology.Server.Controllers;
|
||||||
|
|
||||||
[Route("/error")]
|
[Route("/error")]
|
||||||
public class ErrorHandlerController : Controller
|
public class ErrorHandlerController : Controller
|
||||||
@ -14,8 +12,8 @@ public class ErrorHandlerController : Controller
|
|||||||
|
|
||||||
public IActionResult Index()
|
public IActionResult Index()
|
||||||
{
|
{
|
||||||
IExceptionHandlerFeature error = HttpContext.Features.Get<IExceptionHandlerFeature>();
|
IExceptionHandlerFeature? error = HttpContext.Features.Get<IExceptionHandlerFeature>();
|
||||||
if (error == null)
|
if (error is null)
|
||||||
{
|
{
|
||||||
return Redirect("~/");
|
return Redirect("~/");
|
||||||
}
|
}
|
||||||
@ -24,7 +22,7 @@ public class ErrorHandlerController : Controller
|
|||||||
_Logger.LogError("Unhandled exception: " + error.Error.ToString());
|
_Logger.LogError("Unhandled exception: " + error.Error.ToString());
|
||||||
dynamic r = new
|
dynamic r = new
|
||||||
{
|
{
|
||||||
Message = error.Error == null ? "Error" : error.Error.Message
|
Message = error.Error is null ? "Error" : error.Error.Message
|
||||||
};
|
};
|
||||||
return StatusCode(StatusCodes.Status500InternalServerError, r);
|
return StatusCode(StatusCodes.Status500InternalServerError, r);
|
||||||
}
|
}
|
@ -1,30 +1,27 @@
|
|||||||
using Infineon.Monitoring.MonA;
|
using Infineon.Monitoring.MonA;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Filters;
|
using Microsoft.AspNetCore.Mvc.Filters;
|
||||||
using Microsoft.Extensions.Logging;
|
using OI.Metrology.Server.Models;
|
||||||
using OI.Metrology.Shared.DataModels;
|
using OI.Metrology.Shared.DataModels;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.ViewModels;
|
using OI.Metrology.Shared.ViewModels;
|
||||||
using OI.Metrology.Viewer.Models;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace OI.Metrology.Viewer.Controllers;
|
namespace OI.Metrology.Server.Controllers;
|
||||||
|
|
||||||
public class ExportController : Controller
|
public class ExportController : Controller
|
||||||
{
|
{
|
||||||
private readonly ILogger _Logger;
|
|
||||||
private readonly bool _IsTestDatabase;
|
|
||||||
private readonly IMetrologyRepo _Repo;
|
|
||||||
private readonly AppSettings _AppSettings;
|
|
||||||
|
|
||||||
public ExportController(AppSettings appSettings, ILogger<ExportController> logger, IMetrologyRepo repo)
|
private readonly ILogger _Logger;
|
||||||
|
private readonly AppSettings _AppSettings;
|
||||||
|
private readonly bool _IsTestDatabase;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
|
public ExportController(AppSettings appSettings, ILogger<ExportController> logger, IMetrologyRepository metrologyRepository)
|
||||||
{
|
{
|
||||||
_Repo = repo;
|
|
||||||
_Logger = logger;
|
_Logger = logger;
|
||||||
_AppSettings = appSettings;
|
_AppSettings = appSettings;
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
_IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
|
_IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,18 +30,21 @@ public class ExportController : Controller
|
|||||||
base.OnActionExecuted(context);
|
base.OnActionExecuted(context);
|
||||||
ViewBag.IsTestDatabase = _IsTestDatabase;
|
ViewBag.IsTestDatabase = _IsTestDatabase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetApiUrl() => string.IsNullOrEmpty(_AppSettings.ApiUrl) ? Url.Content("~/") : _AppSettings.ApiUrl[0] == '~' ? Url.Content(_AppSettings.ApiUrl) : _AppSettings.ApiUrl;
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/Export")]
|
[Route("/Export")]
|
||||||
public ActionResult Index()
|
public ActionResult Index()
|
||||||
{
|
{
|
||||||
Export model = new()
|
Export model = new()
|
||||||
{
|
{
|
||||||
ToolType = "",
|
|
||||||
StartTime = DateTime.Now.AddMonths(-1),
|
StartTime = DateTime.Now.AddMonths(-1),
|
||||||
EndTime = DateTime.Now
|
EndTime = DateTime.Now
|
||||||
};
|
};
|
||||||
MonIn monIn = MonIn.GetInstance();
|
MonIn monIn = MonIn.GetInstance();
|
||||||
_ = monIn.SendStatus(_AppSettings.MonASite, _AppSettings.MonAResource, "Heartbeat", State.Up);
|
_ = monIn.SendStatus(_AppSettings.MonASite, _AppSettings.MonAResource, "Heartbeat", State.Up);
|
||||||
|
ViewBag.ApiUrl = GetApiUrl();
|
||||||
return View(model);
|
return View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,14 +52,14 @@ public class ExportController : Controller
|
|||||||
[Route("/ExportData")]
|
[Route("/ExportData")]
|
||||||
public ActionResult ExportData(Export model)
|
public ActionResult ExportData(Export model)
|
||||||
{
|
{
|
||||||
ToolType toolType = null;
|
ToolType? toolType = null;
|
||||||
if (string.IsNullOrEmpty(model.ToolType))
|
if (string.IsNullOrEmpty(model.ToolType))
|
||||||
ModelState.AddModelError("Exception", "Invalid selection");
|
ModelState.AddModelError("Exception", "Invalid selection");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (model.StartTime > model.EndTime)
|
if (model.StartTime > model.EndTime)
|
||||||
ModelState.AddModelError("EndTime", "End time must be after start time");
|
ModelState.AddModelError("EndTime", "End time must be after start time");
|
||||||
IEnumerable<ToolType> toolTypes = _Repo.GetToolTypes();
|
IEnumerable<ToolType> toolTypes = _MetrologyRepository.GetToolTypes();
|
||||||
toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault();
|
toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault();
|
||||||
if (toolType is null)
|
if (toolType is null)
|
||||||
ModelState.AddModelError("ToolType", "Invalid selection");
|
ModelState.AddModelError("ToolType", "Invalid selection");
|
||||||
@ -73,7 +73,7 @@ public class ExportController : Controller
|
|||||||
DateTime startDT = model.StartDate.Date.Add(model.StartTime.TimeOfDay);
|
DateTime startDT = model.StartDate.Date.Add(model.StartTime.TimeOfDay);
|
||||||
DateTime endDT = model.EndDate.Date.Add(model.EndTime.TimeOfDay);
|
DateTime endDT = model.EndDate.Date.Add(model.EndTime.TimeOfDay);
|
||||||
|
|
||||||
return DoCSVExport(toolType.ToolTypeName, toolType.ExportSPName, startDT, endDT);
|
return DoCSVExport(toolType?.ToolTypeName, toolType?.ExportSPName, startDT, endDT);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -81,27 +81,25 @@ public class ExportController : Controller
|
|||||||
ModelState.AddModelError("Exception", ex.Message);
|
ModelState.AddModelError("Exception", ex.Message);
|
||||||
string errorMessage = $"Error exporting: {ex}";
|
string errorMessage = $"Error exporting: {ex}";
|
||||||
_Logger.LogError(message: errorMessage);
|
_Logger.LogError(message: errorMessage);
|
||||||
|
MonIn monIn = MonIn.GetInstance();
|
||||||
|
_ = monIn.SendStatus(_AppSettings.MonASite, _AppSettings.MonAResource, "Heartbeat", State.Warning);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ViewBag.ApiUrl = GetApiUrl();
|
||||||
return View("Index", model);
|
return View("Index", model);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ActionResult DoCSVExport(string toolTypeName, string spName, DateTime startTime, DateTime endTime)
|
protected ActionResult DoCSVExport(string? toolTypeName, string? spName, DateTime startTime, DateTime endTime)
|
||||||
{
|
{
|
||||||
string fileName = string.Format("Export_{0}_{1:yyyyMMddHHmm}_to_{2:yyyyMMddHHmm}.csv", toolTypeName, startTime, endTime);
|
string fileName = string.Format("Export_{0}_{1:yyyyMMddHHmm}_to_{2:yyyyMMddHHmm}.csv", toolTypeName, startTime, endTime);
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
if (spName is null)
|
||||||
System.Data.DataTable dt = _Repo.ExportData(spName, startTime, endTime);
|
throw new NullReferenceException(nameof(spName));
|
||||||
|
System.Data.DataTable dt = _MetrologyRepository.ExportData(spName, startTime, endTime);
|
||||||
_ = sb.AppendLine(GetColumnHeaders(dt));
|
_ = sb.AppendLine(GetColumnHeaders(dt));
|
||||||
|
|
||||||
foreach (System.Data.DataRow dr in dt.Rows)
|
foreach (System.Data.DataRow dr in dt.Rows)
|
||||||
{
|
|
||||||
_ = sb.AppendLine(GetRowData(dr));
|
_ = sb.AppendLine(GetRowData(dr));
|
||||||
}
|
|
||||||
|
|
||||||
byte[] contents = Encoding.UTF8.GetBytes(sb.ToString());
|
byte[] contents = Encoding.UTF8.GetBytes(sb.ToString());
|
||||||
|
|
||||||
return File(contents, "application/octet-stream", fileName);
|
return File(contents, "application/octet-stream", fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,10 +110,13 @@ public class ExportController : Controller
|
|||||||
{
|
{
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
_ = r.Append(',');
|
_ = r.Append(',');
|
||||||
|
|
||||||
object v = dr[i];
|
object v = dr[i];
|
||||||
if (!Convert.IsDBNull(v))
|
if (!Convert.IsDBNull(v))
|
||||||
_ = r.Append(FormatForCSV(Convert.ToString(v)));
|
{
|
||||||
|
string? c = Convert.ToString(v);
|
||||||
|
if (c is not null)
|
||||||
|
_ = r.Append(FormatForCSV(c));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return r.ToString();
|
return r.ToString();
|
||||||
}
|
}
|
||||||
@ -135,16 +136,13 @@ public class ExportController : Controller
|
|||||||
|
|
||||||
protected static string FormatForCSV(string v)
|
protected static string FormatForCSV(string v)
|
||||||
{
|
{
|
||||||
StringBuilder r = new(v.Length + 2);
|
|
||||||
|
|
||||||
bool doubleQuoted = false;
|
bool doubleQuoted = false;
|
||||||
|
StringBuilder r = new(v.Length + 2);
|
||||||
if (v.StartsWith(' ') || v.EndsWith(' ') || v.Contains(',') || v.Contains('"'))
|
if (v.StartsWith(' ') || v.EndsWith(' ') || v.Contains(',') || v.Contains('"'))
|
||||||
{
|
{
|
||||||
_ = r.Append('"');
|
_ = r.Append('"');
|
||||||
doubleQuoted = true;
|
doubleQuoted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (char c in v)
|
foreach (char c in v)
|
||||||
{
|
{
|
||||||
_ = c switch
|
_ = c switch
|
||||||
@ -154,10 +152,8 @@ public class ExportController : Controller
|
|||||||
_ => r.Append(c),
|
_ => r.Append(c),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (doubleQuoted)
|
if (doubleQuoted)
|
||||||
_ = r.Append('"');
|
_ = r.Append('"');
|
||||||
|
|
||||||
return r.ToString();
|
return r.ToString();
|
||||||
}
|
}
|
||||||
|
|
@ -1,20 +1,22 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Filters;
|
using Microsoft.AspNetCore.Mvc.Filters;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Server.Models;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.ViewModels;
|
using OI.Metrology.Shared.ViewModels;
|
||||||
using OI.Metrology.Viewer.Models;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace OI.Metrology.Viewer.Controllers;
|
namespace OI.Metrology.Server.Controllers;
|
||||||
|
|
||||||
public class PagesController : Controller
|
public class PagesController : Controller
|
||||||
{
|
{
|
||||||
private readonly IMetrologyRepo _Repo;
|
|
||||||
private readonly bool _IsTestDatabase;
|
|
||||||
|
|
||||||
public PagesController(AppSettings appSettings, IMetrologyRepo repo)
|
private readonly bool _IsTestDatabase;
|
||||||
|
private readonly AppSettings _AppSettings;
|
||||||
|
private readonly IMetrologyRepository _MetrologyRepository;
|
||||||
|
|
||||||
|
public PagesController(AppSettings appSettings, IMetrologyRepository metrologyRepository)
|
||||||
{
|
{
|
||||||
_Repo = repo;
|
_AppSettings = appSettings;
|
||||||
|
_MetrologyRepository = metrologyRepository;
|
||||||
_IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
|
_IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,16 +26,24 @@ public class PagesController : Controller
|
|||||||
ViewBag.IsTestDatabase = _IsTestDatabase;
|
ViewBag.IsTestDatabase = _IsTestDatabase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetApiUrl() => string.IsNullOrEmpty(_AppSettings.ApiUrl) ? Url.Content("~/") : _AppSettings.ApiUrl[0] == '~' ? Url.Content(_AppSettings.ApiUrl) : _AppSettings.ApiUrl;
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/")]
|
[Route("/")]
|
||||||
public IActionResult Index() =>
|
public IActionResult Index()
|
||||||
View("AwaitingDispo");
|
{
|
||||||
|
ViewBag.ApiUrl = GetApiUrl();
|
||||||
|
return View("AwaitingDispo");
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/AwaitingDispo")]
|
[Route("/AwaitingDispo")]
|
||||||
[Route("/Metrology/AwaitingDispo")]
|
[Route("/Metrology/AwaitingDispo")]
|
||||||
public IActionResult AwaitingDispo() =>
|
public IActionResult AwaitingDispo()
|
||||||
View();
|
{
|
||||||
|
ViewBag.ApiUrl = GetApiUrl();
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/RunInfo")]
|
[Route("/RunInfo")]
|
||||||
@ -48,16 +58,20 @@ public class PagesController : Controller
|
|||||||
};
|
};
|
||||||
if (headerid > 0)
|
if (headerid > 0)
|
||||||
{
|
{
|
||||||
m.HeaderAttachmentID = _Repo.GetHeaderAttachmentID(tooltypeid, headerid);
|
m.HeaderAttachmentID = _MetrologyRepository.GetHeaderAttachmentID(tooltypeid, headerid);
|
||||||
}
|
}
|
||||||
|
ViewBag.ApiUrl = GetApiUrl();
|
||||||
return View(m);
|
return View(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/RunHeaders")]
|
[Route("/RunHeaders")]
|
||||||
[Route("/Metrology/RunHeaders")]
|
[Route("/Metrology/RunHeaders")]
|
||||||
public IActionResult RunHeaders() =>
|
public IActionResult RunHeaders()
|
||||||
View();
|
{
|
||||||
|
ViewBag.ApiUrl = GetApiUrl();
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/Crash")]
|
[Route("/Crash")]
|
82
Server/Controllers/ReactorsController.cs
Normal file
82
Server/Controllers/ReactorsController.cs
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Filters;
|
||||||
|
using OI.Metrology.Server.Models;
|
||||||
|
using OI.Metrology.Shared.ViewModels;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.Controllers;
|
||||||
|
|
||||||
|
public class ReactorsController : Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly bool _IsTestDatabase;
|
||||||
|
private readonly AppSettings _AppSettings;
|
||||||
|
|
||||||
|
public ReactorsController(AppSettings appSettings)
|
||||||
|
{
|
||||||
|
_AppSettings = appSettings;
|
||||||
|
_IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnActionExecuted(ActionExecutedContext context)
|
||||||
|
{
|
||||||
|
base.OnActionExecuted(context);
|
||||||
|
ViewBag.IsTestDatabase = _IsTestDatabase;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetApiUrl() => string.IsNullOrEmpty(_AppSettings.ApiUrl) ? Url.Content("~/") : _AppSettings.ApiUrl[0] == '~' ? Url.Content(_AppSettings.ApiUrl) : _AppSettings.ApiUrl;
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("/Step1")]
|
||||||
|
[Route("/Metrology/Step1")]
|
||||||
|
public IActionResult Step1(string mod = "", string equipment = "", string layer = "", string zone = "", string rds = "", string initials = "")
|
||||||
|
{
|
||||||
|
string directory = "D:/Tmp/Metrology";
|
||||||
|
if (!Directory.Exists(directory))
|
||||||
|
_ = Directory.CreateDirectory(directory);
|
||||||
|
string[] model = new string[] { mod, equipment, layer, zone, rds, initials };
|
||||||
|
if (!string.IsNullOrEmpty(initials))
|
||||||
|
System.IO.File.WriteAllLines(Path.Combine(directory, $"{DateTime.Now.Ticks}-{initials}.rsv"), model);
|
||||||
|
return View(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("/Step2")]
|
||||||
|
[Route("/Metrology/Step2")]
|
||||||
|
public IActionResult Step2(string mod) =>
|
||||||
|
View(new string[] { mod });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("/Step3")]
|
||||||
|
[Route("/Metrology/Step3")]
|
||||||
|
public IActionResult Step3(string mod, string equipment) =>
|
||||||
|
View(new string[] { mod, equipment });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("/Step4")]
|
||||||
|
[Route("/Metrology/Step4")]
|
||||||
|
public IActionResult Step4(string mod, string equipment, string layer) =>
|
||||||
|
View(new string[] { mod, equipment, layer });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("/Step5")]
|
||||||
|
[Route("/Metrology/Step5")]
|
||||||
|
public IActionResult Step5(string mod, string equipment, string layer, string zone) =>
|
||||||
|
View(new string[] { mod, equipment, layer, zone });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("/Step6")]
|
||||||
|
[Route("/Metrology/Step6")]
|
||||||
|
public IActionResult Step6(string mod, string equipment, string layer, string zone, string rds) =>
|
||||||
|
View(new string[] { mod, equipment, layer, zone, rds });
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("/Reactor")]
|
||||||
|
[Route("/Metrology/Reactor")]
|
||||||
|
public IActionResult Reactor() => View(new RunInfo());
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("/WorkMaterial")]
|
||||||
|
[Route("/Metrology/WorkMaterial")]
|
||||||
|
public IActionResult WorkMaterial() => View();
|
||||||
|
|
||||||
|
}
|
8035
Server/Data/Mike/service-shop.json
Normal file
8035
Server/Data/Mike/service-shop.json
Normal file
File diff suppressed because it is too large
Load Diff
1
Server/Data/Tests/AppSettings-GetAppSettings.json
Normal file
1
Server/Data/Tests/AppSettings-GetAppSettings.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"apiExportPath":null,"apiLoggingContentTypes":null,"apiLoggingPathPrefixes":null,"apiLogPath":null,"apiUrl":null,"attachmentPath":null,"buildNumber":"1000014","company":"Infineon Technologies Americas Corp.","connectionString":null,"gitCommitSeven":"6bc0487","inboundApiAllowedIPList":null,"isDevelopment":false,"isStaging":false,"mockRoot":null,"monAResource":null,"monASite":null,"oi2SqlConnectionString":null,"tableToPath":null,"urLs":null,"workingDirectoryName":null}
|
@ -0,0 +1 @@
|
|||||||
|
1000014-6bc0487
|
1
Server/Data/Tests/ClientSettings-GetClientSettings.json
Normal file
1
Server/Data/Tests/ClientSettings-GetClientSettings.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
["remoteIpAddress"]
|
0
Server/Data/Tests/ClientSettings-GetIpAddress.json
Normal file
0
Server/Data/Tests/ClientSettings-GetIpAddress.json
Normal file
0
Server/Data/Tests/Export-GetExport.txt
Normal file
0
Server/Data/Tests/Export-GetExport.txt
Normal file
4
Server/Data/Tests/Export-GetHeaders.json
Normal file
4
Server/Data/Tests/Export-GetHeaders.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"Results": [],
|
||||||
|
"TotalRows": 0
|
||||||
|
}
|
90
Server/Data/Tests/Export-GetLogistics.json
Normal file
90
Server/Data/Tests/Export-GetLogistics.json
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"ID": 0,
|
||||||
|
"InsertDate": "0001-01-01T00:00:00",
|
||||||
|
"AttachmentID": "00000000-0000-0000-0000-000000000000",
|
||||||
|
"Title": null,
|
||||||
|
"Date": "0001-01-01T00:00:00",
|
||||||
|
"ToolTypeID": 0,
|
||||||
|
"ToolTypeName": null,
|
||||||
|
"MesEntity": "TENCOR2",
|
||||||
|
"Employee": "PRE",
|
||||||
|
"Layer": null,
|
||||||
|
"PSN": "",
|
||||||
|
"RDS": "",
|
||||||
|
"Reactor": "",
|
||||||
|
"Recipe": "8IN.2QUAL",
|
||||||
|
"Zone": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ID": 0,
|
||||||
|
"InsertDate": "0001-01-01T00:00:00",
|
||||||
|
"AttachmentID": "00000000-0000-0000-0000-000000000000",
|
||||||
|
"Title": null,
|
||||||
|
"Date": "0001-01-01T00:00:00",
|
||||||
|
"ToolTypeID": 0,
|
||||||
|
"ToolTypeName": null,
|
||||||
|
"MesEntity": "TENCOR3",
|
||||||
|
"Employee": "",
|
||||||
|
"Layer": null,
|
||||||
|
"PSN": "",
|
||||||
|
"RDS": "",
|
||||||
|
"Reactor": "",
|
||||||
|
"Recipe": "8INCLEAN",
|
||||||
|
"Zone": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ID": 0,
|
||||||
|
"InsertDate": "0001-01-01T00:00:00",
|
||||||
|
"AttachmentID": "00000000-0000-0000-0000-000000000000",
|
||||||
|
"Title": null,
|
||||||
|
"Date": "0001-01-01T00:00:00",
|
||||||
|
"ToolTypeID": 0,
|
||||||
|
"ToolTypeName": null,
|
||||||
|
"MesEntity": "TENCOR3",
|
||||||
|
"Employee": "",
|
||||||
|
"Layer": null,
|
||||||
|
"PSN": "",
|
||||||
|
"RDS": "",
|
||||||
|
"Reactor": "",
|
||||||
|
"Recipe": "8IN_THIN ROTR",
|
||||||
|
"Zone": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ID": 0,
|
||||||
|
"InsertDate": "0001-01-01T00:00:00",
|
||||||
|
"AttachmentID": "00000000-0000-0000-0000-000000000000",
|
||||||
|
"Title": null,
|
||||||
|
"Date": "0001-01-01T00:00:00",
|
||||||
|
"ToolTypeID": 0,
|
||||||
|
"ToolTypeName": null,
|
||||||
|
"MesEntity": "TENCOR3",
|
||||||
|
"Employee": "",
|
||||||
|
"Layer": null,
|
||||||
|
"PSN": "",
|
||||||
|
"RDS": "",
|
||||||
|
"Reactor": "",
|
||||||
|
"Recipe": "8IN_PTYPE_ROTR",
|
||||||
|
"Zone": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ID": 0,
|
||||||
|
"InsertDate": "0001-01-01T00:00:00",
|
||||||
|
"AttachmentID": "00000000-0000-0000-0000-000000000000",
|
||||||
|
"Title": null,
|
||||||
|
"Date": "0001-01-01T00:00:00",
|
||||||
|
"ToolTypeID": 0,
|
||||||
|
"ToolTypeName": null,
|
||||||
|
"MesEntity": "TENCOR3",
|
||||||
|
"Employee": "",
|
||||||
|
"Layer": null,
|
||||||
|
"PSN": "",
|
||||||
|
"RDS": "",
|
||||||
|
"Reactor": "",
|
||||||
|
"Recipe": "AS_IFX_ROTR",
|
||||||
|
"Zone": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 5
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
asdf
|
35
Server/Data/Tests/InfinityQS-GetCommandText.sql
Normal file
35
Server/Data/Tests/InfinityQS-GetCommandText.sql
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
select
|
||||||
|
se.f_sgrp se_sgrp,
|
||||||
|
se.f_sgtm se_sgtm,
|
||||||
|
se.f_tsno se_tsno,
|
||||||
|
se.f_val se_val,
|
||||||
|
rd.f_name rd_name,
|
||||||
|
jd.f_name jd_name,
|
||||||
|
pl.f_name pl_name,
|
||||||
|
pd.f_name pd_name,
|
||||||
|
td.f_test td_test,
|
||||||
|
td.f_name td_name,
|
||||||
|
(select count(ev.f_evnt)
|
||||||
|
from [spcepiworld].[dbo].[evnt_inf] ev
|
||||||
|
where ev.f_prcs = rd.f_prcs
|
||||||
|
and ev.f_part = pd.f_part
|
||||||
|
and ev.f_sgtm = se.f_sgtm) ev_count
|
||||||
|
from [spcepiworld].[dbo].[sgrp_ext] se
|
||||||
|
join [spcepiworld].[dbo].[prcs_dat] rd
|
||||||
|
on se.f_prcs = rd.f_prcs
|
||||||
|
join [spcepiworld].[dbo].[job_dat] jd
|
||||||
|
on se.f_job = jd.f_job
|
||||||
|
join [spcepiworld].[dbo].[part_lot] pl
|
||||||
|
on se.f_lot = pl.f_lot
|
||||||
|
join [spcepiworld].[dbo].[part_dat] pd
|
||||||
|
on se.f_part = pd.f_part
|
||||||
|
join [spcepiworld].[dbo].[test_dat] td
|
||||||
|
on se.f_test = td.f_test
|
||||||
|
where se.f_flag = 0
|
||||||
|
and se.f_sgrp = 1677273357
|
||||||
|
and rd.f_name = '61'
|
||||||
|
and pd.f_name = '5012'
|
||||||
|
and jd.f_name = 'CDE5'
|
||||||
|
and pl.f_name = '575908'
|
||||||
|
and dateadd(HH, -7, (dateadd(SS, convert(bigint, se.f_sgtm), '19700101'))) = '2023-02-24 15:15:00'
|
||||||
|
for json path
|
905
Server/Data/Tests/InfinityQS-GetData.json
Normal file
905
Server/Data/Tests/InfinityQS-GetData.json
Normal file
@ -0,0 +1,905 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 1,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 270
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 1,
|
||||||
|
"TD_TEST": 1654782546,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Merit",
|
||||||
|
"SE_VAL": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 1,
|
||||||
|
"TD_TEST": 1656716039,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "R",
|
||||||
|
"SE_VAL": 95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 1,
|
||||||
|
"TD_TEST": 1656716040,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Rs",
|
||||||
|
"SE_VAL": 1399.703
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 1,
|
||||||
|
"TD_TEST": 1656716248,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Avg",
|
||||||
|
"SE_VAL": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 1,
|
||||||
|
"TD_TEST": 1656716249,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Temp",
|
||||||
|
"SE_VAL": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 2,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 270
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 2,
|
||||||
|
"TD_TEST": 1654782546,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Merit",
|
||||||
|
"SE_VAL": 0.9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 2,
|
||||||
|
"TD_TEST": 1656716039,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "R",
|
||||||
|
"SE_VAL": 71
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 2,
|
||||||
|
"TD_TEST": 1656716040,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Rs",
|
||||||
|
"SE_VAL": 1425.322
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 2,
|
||||||
|
"TD_TEST": 1656716248,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Avg",
|
||||||
|
"SE_VAL": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 2,
|
||||||
|
"TD_TEST": 1656716249,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Temp",
|
||||||
|
"SE_VAL": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 3,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 270
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 3,
|
||||||
|
"TD_TEST": 1654782546,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Merit",
|
||||||
|
"SE_VAL": 0.92
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 3,
|
||||||
|
"TD_TEST": 1656716039,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "R",
|
||||||
|
"SE_VAL": 47
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 3,
|
||||||
|
"TD_TEST": 1656716040,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Rs",
|
||||||
|
"SE_VAL": 1439.78
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 3,
|
||||||
|
"TD_TEST": 1656716248,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Avg",
|
||||||
|
"SE_VAL": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 3,
|
||||||
|
"TD_TEST": 1656716249,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Temp",
|
||||||
|
"SE_VAL": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 4,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 270
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 4,
|
||||||
|
"TD_TEST": 1654782546,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Merit",
|
||||||
|
"SE_VAL": 0.93
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 4,
|
||||||
|
"TD_TEST": 1656716039,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "R",
|
||||||
|
"SE_VAL": 23
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 4,
|
||||||
|
"TD_TEST": 1656716040,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Rs",
|
||||||
|
"SE_VAL": 1382.154
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 4,
|
||||||
|
"TD_TEST": 1656716248,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Avg",
|
||||||
|
"SE_VAL": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 4,
|
||||||
|
"TD_TEST": 1656716249,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Temp",
|
||||||
|
"SE_VAL": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 5,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 5,
|
||||||
|
"TD_TEST": 1654782546,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Merit",
|
||||||
|
"SE_VAL": 0.87
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 5,
|
||||||
|
"TD_TEST": 1656716039,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "R",
|
||||||
|
"SE_VAL": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 5,
|
||||||
|
"TD_TEST": 1656716040,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Rs",
|
||||||
|
"SE_VAL": 1406.158
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 5,
|
||||||
|
"TD_TEST": 1656716248,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Avg",
|
||||||
|
"SE_VAL": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 5,
|
||||||
|
"TD_TEST": 1656716249,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Temp",
|
||||||
|
"SE_VAL": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 6,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 6,
|
||||||
|
"TD_TEST": 1654782546,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Merit",
|
||||||
|
"SE_VAL": 0.87
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 6,
|
||||||
|
"TD_TEST": 1656716039,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "R",
|
||||||
|
"SE_VAL": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 6,
|
||||||
|
"TD_TEST": 1656716040,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Rs",
|
||||||
|
"SE_VAL": 1394.458
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 6,
|
||||||
|
"TD_TEST": 1656716248,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Avg",
|
||||||
|
"SE_VAL": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 6,
|
||||||
|
"TD_TEST": 1656716249,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Temp",
|
||||||
|
"SE_VAL": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 7,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 7,
|
||||||
|
"TD_TEST": 1654782546,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Merit",
|
||||||
|
"SE_VAL": 0.85
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 7,
|
||||||
|
"TD_TEST": 1656716039,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "R",
|
||||||
|
"SE_VAL": 35
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 7,
|
||||||
|
"TD_TEST": 1656716040,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Rs",
|
||||||
|
"SE_VAL": 1387.965
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 7,
|
||||||
|
"TD_TEST": 1656716248,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Avg",
|
||||||
|
"SE_VAL": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 7,
|
||||||
|
"TD_TEST": 1656716249,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Temp",
|
||||||
|
"SE_VAL": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 8,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 8,
|
||||||
|
"TD_TEST": 1654782546,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Merit",
|
||||||
|
"SE_VAL": 0.98
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 8,
|
||||||
|
"TD_TEST": 1656716039,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "R",
|
||||||
|
"SE_VAL": 59
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 8,
|
||||||
|
"TD_TEST": 1656716040,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Rs",
|
||||||
|
"SE_VAL": 1411.158
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 8,
|
||||||
|
"TD_TEST": 1656716248,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Avg",
|
||||||
|
"SE_VAL": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 8,
|
||||||
|
"TD_TEST": 1656716249,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Temp",
|
||||||
|
"SE_VAL": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 9,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 9,
|
||||||
|
"TD_TEST": 1654782546,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Merit",
|
||||||
|
"SE_VAL": 0.88
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 9,
|
||||||
|
"TD_TEST": 1656716039,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "R",
|
||||||
|
"SE_VAL": 83
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 9,
|
||||||
|
"TD_TEST": 1656716040,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Rs",
|
||||||
|
"SE_VAL": 1413.722
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 9,
|
||||||
|
"TD_TEST": 1656716248,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Avg",
|
||||||
|
"SE_VAL": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 9,
|
||||||
|
"TD_TEST": 1656716249,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Temp",
|
||||||
|
"SE_VAL": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 10,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 10,
|
||||||
|
"TD_TEST": 1654782546,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Merit",
|
||||||
|
"SE_VAL": 0.98
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 10,
|
||||||
|
"TD_TEST": 1656716039,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "R",
|
||||||
|
"SE_VAL": 95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 10,
|
||||||
|
"TD_TEST": 1656716040,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Rs",
|
||||||
|
"SE_VAL": 1401.816
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 10,
|
||||||
|
"TD_TEST": 1656716248,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Avg",
|
||||||
|
"SE_VAL": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 10,
|
||||||
|
"TD_TEST": 1656716249,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "Temp",
|
||||||
|
"SE_VAL": 18.2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 60
|
||||||
|
}
|
236
Server/Data/Tests/InfinityQS-GetDescriptors.json
Normal file
236
Server/Data/Tests/InfinityQS-GetDescriptors.json
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 0,
|
||||||
|
"DD_DSGP": 1655312695,
|
||||||
|
"GD_NAME": "Recipe",
|
||||||
|
"DD_NAME": "LSL8IN \\ 10PT_5mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 0,
|
||||||
|
"DD_DSGP": 1656696777,
|
||||||
|
"GD_NAME": "Layer",
|
||||||
|
"DD_NAME": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 0,
|
||||||
|
"DD_DSGP": 1656696778,
|
||||||
|
"GD_NAME": "Zone",
|
||||||
|
"DD_NAME": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 1,
|
||||||
|
"DD_DSGP": 1656716039,
|
||||||
|
"GD_NAME": "DataReject",
|
||||||
|
"DD_NAME": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 2,
|
||||||
|
"DD_DSGP": 1656716039,
|
||||||
|
"GD_NAME": "DataReject",
|
||||||
|
"DD_NAME": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 3,
|
||||||
|
"DD_DSGP": 1656716039,
|
||||||
|
"GD_NAME": "DataReject",
|
||||||
|
"DD_NAME": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 4,
|
||||||
|
"DD_DSGP": 1656716039,
|
||||||
|
"GD_NAME": "DataReject",
|
||||||
|
"DD_NAME": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 5,
|
||||||
|
"DD_DSGP": 1656716039,
|
||||||
|
"GD_NAME": "DataReject",
|
||||||
|
"DD_NAME": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 6,
|
||||||
|
"DD_DSGP": 1656716039,
|
||||||
|
"GD_NAME": "DataReject",
|
||||||
|
"DD_NAME": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 7,
|
||||||
|
"DD_DSGP": 1656716039,
|
||||||
|
"GD_NAME": "DataReject",
|
||||||
|
"DD_NAME": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 8,
|
||||||
|
"DD_DSGP": 1656716039,
|
||||||
|
"GD_NAME": "DataReject",
|
||||||
|
"DD_NAME": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 9,
|
||||||
|
"DD_DSGP": 1656716039,
|
||||||
|
"GD_NAME": "DataReject",
|
||||||
|
"DD_NAME": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 10,
|
||||||
|
"DD_DSGP": 1656716039,
|
||||||
|
"GD_NAME": "DataReject",
|
||||||
|
"DD_NAME": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 1,
|
||||||
|
"DD_DSGP": 1656716040,
|
||||||
|
"GD_NAME": "Pt",
|
||||||
|
"DD_NAME": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 2,
|
||||||
|
"DD_DSGP": 1656716040,
|
||||||
|
"GD_NAME": "Pt",
|
||||||
|
"DD_NAME": "2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 3,
|
||||||
|
"DD_DSGP": 1656716040,
|
||||||
|
"GD_NAME": "Pt",
|
||||||
|
"DD_NAME": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 4,
|
||||||
|
"DD_DSGP": 1656716040,
|
||||||
|
"GD_NAME": "Pt",
|
||||||
|
"DD_NAME": "4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 5,
|
||||||
|
"DD_DSGP": 1656716040,
|
||||||
|
"GD_NAME": "Pt",
|
||||||
|
"DD_NAME": "5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 6,
|
||||||
|
"DD_DSGP": 1656716040,
|
||||||
|
"GD_NAME": "Pt",
|
||||||
|
"DD_NAME": "6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 7,
|
||||||
|
"DD_DSGP": 1656716040,
|
||||||
|
"GD_NAME": "Pt",
|
||||||
|
"DD_NAME": "7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 8,
|
||||||
|
"DD_DSGP": 1656716040,
|
||||||
|
"GD_NAME": "Pt",
|
||||||
|
"DD_NAME": "8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 9,
|
||||||
|
"DD_DSGP": 1656716040,
|
||||||
|
"GD_NAME": "Pt",
|
||||||
|
"DD_NAME": "9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 10,
|
||||||
|
"DD_DSGP": 1656716040,
|
||||||
|
"GD_NAME": "Pt",
|
||||||
|
"DD_NAME": "10"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 1,
|
||||||
|
"DD_DSGP": 1656716042,
|
||||||
|
"GD_NAME": "StdDev",
|
||||||
|
"DD_NAME": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 2,
|
||||||
|
"DD_DSGP": 1656716042,
|
||||||
|
"GD_NAME": "StdDev",
|
||||||
|
"DD_NAME": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 3,
|
||||||
|
"DD_DSGP": 1656716042,
|
||||||
|
"GD_NAME": "StdDev",
|
||||||
|
"DD_NAME": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 4,
|
||||||
|
"DD_DSGP": 1656716042,
|
||||||
|
"GD_NAME": "StdDev",
|
||||||
|
"DD_NAME": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 5,
|
||||||
|
"DD_DSGP": 1656716042,
|
||||||
|
"GD_NAME": "StdDev",
|
||||||
|
"DD_NAME": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 6,
|
||||||
|
"DD_DSGP": 1656716042,
|
||||||
|
"GD_NAME": "StdDev",
|
||||||
|
"DD_NAME": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 7,
|
||||||
|
"DD_DSGP": 1656716042,
|
||||||
|
"GD_NAME": "StdDev",
|
||||||
|
"DD_NAME": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 8,
|
||||||
|
"DD_DSGP": 1656716042,
|
||||||
|
"GD_NAME": "StdDev",
|
||||||
|
"DD_NAME": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 9,
|
||||||
|
"DD_DSGP": 1656716042,
|
||||||
|
"GD_NAME": "StdDev",
|
||||||
|
"DD_NAME": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SD_SGRP": 1677273357,
|
||||||
|
"SD_TSNO": 10,
|
||||||
|
"DD_DSGP": 1656716042,
|
||||||
|
"GD_NAME": "StdDev",
|
||||||
|
"DD_NAME": "1.23%"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 33
|
||||||
|
}
|
4
Server/Data/Tests/InfinityQS-GetEvents.json
Normal file
4
Server/Data/Tests/InfinityQS-GetEvents.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"Results": [],
|
||||||
|
"TotalRows": 0
|
||||||
|
}
|
20
Server/Data/Tests/InfinityQS-GetHeader.json
Normal file
20
Server/Data/Tests/InfinityQS-GetHeader.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"EV_COUNT": 0,
|
||||||
|
"CL_COUNT": 0,
|
||||||
|
"SL_COUNT": 0,
|
||||||
|
"SE_SGRP": 1677273357,
|
||||||
|
"SE_SGTM": 1677273300,
|
||||||
|
"SE_TSNO": 1,
|
||||||
|
"TD_TEST": 1650647347,
|
||||||
|
"PR_NAME": "61",
|
||||||
|
"JD_NAME": "CDE5",
|
||||||
|
"PL_NAME": "575908",
|
||||||
|
"PD_NAME": "5012",
|
||||||
|
"TD_NAME": "T",
|
||||||
|
"SE_VAL": 270
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 1
|
||||||
|
}
|
50
Server/Data/Tests/InfinityQSV2-GetCommandText.sql
Normal file
50
Server/Data/Tests/InfinityQSV2-GetCommandText.sql
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
select iq.ev_count, iq.cl_count, iq.sl_count, iq.se_sgrp, iq.se_sgtm, iq.se_tsno, iq.td_test, iq.pr_name, iq.jd_name, iq.pl_name, iq.pd_name, iq.td_name, iq.se_val
|
||||||
|
from (
|
||||||
|
select
|
||||||
|
se.f_sgrp se_sgrp,
|
||||||
|
se.f_sgtm se_sgtm,
|
||||||
|
se.f_tsno se_tsno,
|
||||||
|
se.f_val se_val,
|
||||||
|
pr.f_name pr_name,
|
||||||
|
jd.f_name jd_name,
|
||||||
|
pl.f_name pl_name,
|
||||||
|
pd.f_name pd_name,
|
||||||
|
td.f_test td_test,
|
||||||
|
td.f_name td_name,
|
||||||
|
(select count(cl.f_part)
|
||||||
|
from [spcepiworld].[dbo].[ctrl_lim] cl
|
||||||
|
where cl.f_part = pd.f_part
|
||||||
|
and cl.f_test = td.f_test
|
||||||
|
) cl_count,
|
||||||
|
(select count(sl.f_part)
|
||||||
|
from [spcepiworld].[dbo].[spec_lim] sl
|
||||||
|
where sl.f_part = pd.f_part
|
||||||
|
and sl.f_test = td.f_test
|
||||||
|
) sl_count,
|
||||||
|
(select count(ev.f_evnt)
|
||||||
|
from [spcepiworld].[dbo].[evnt_inf] ev
|
||||||
|
where ev.f_prcs = pr.f_prcs
|
||||||
|
and ev.f_part = pd.f_part
|
||||||
|
and ev.f_sgtm = se.f_sgtm
|
||||||
|
) ev_count
|
||||||
|
from [spcepiworld].[dbo].[sgrp_ext] se
|
||||||
|
join [spcepiworld].[dbo].[prcs_dat] pr
|
||||||
|
on se.f_prcs = pr.f_prcs
|
||||||
|
join [spcepiworld].[dbo].[job_dat] jd
|
||||||
|
on se.f_job = jd.f_job
|
||||||
|
join [spcepiworld].[dbo].[part_lot] pl
|
||||||
|
on se.f_lot = pl.f_lot
|
||||||
|
join [spcepiworld].[dbo].[part_dat] pd
|
||||||
|
on se.f_part = pd.f_part
|
||||||
|
join [spcepiworld].[dbo].[test_dat] td
|
||||||
|
on se.f_test = td.f_test
|
||||||
|
where se.f_flag = 0
|
||||||
|
and se.f_sgrp = 1677273357
|
||||||
|
and pr.f_name = '61'
|
||||||
|
and pd.f_name = '5012'
|
||||||
|
and jd.f_name = 'CDE5'
|
||||||
|
and pl.f_name = '575908'
|
||||||
|
and dateadd(HH, -7, (dateadd(SS, convert(bigint, se.f_sgtm), '19700101'))) = '2023-02-24 15:15:00'
|
||||||
|
) as iq
|
||||||
|
order by iq.ev_count desc, iq.cl_count desc, iq.sl_count desc, iq.se_sgrp, iq.se_tsno, iq.td_test
|
||||||
|
for json path
|
905
Server/Data/Tests/InfinityQSV2-GetData.json
Normal file
905
Server/Data/Tests/InfinityQSV2-GetData.json
Normal file
@ -0,0 +1,905 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 1,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 270
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 1,
|
||||||
|
"VariableNumber": 1654782546,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Merit",
|
||||||
|
"Value": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 1,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "R",
|
||||||
|
"Value": 95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 1,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Rs",
|
||||||
|
"Value": 1399.703
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 1,
|
||||||
|
"VariableNumber": 1656716248,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Avg",
|
||||||
|
"Value": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 1,
|
||||||
|
"VariableNumber": 1656716249,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Temp",
|
||||||
|
"Value": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 2,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 270
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 2,
|
||||||
|
"VariableNumber": 1654782546,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Merit",
|
||||||
|
"Value": 0.9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 2,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "R",
|
||||||
|
"Value": 71
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 2,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Rs",
|
||||||
|
"Value": 1425.322
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 2,
|
||||||
|
"VariableNumber": 1656716248,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Avg",
|
||||||
|
"Value": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 2,
|
||||||
|
"VariableNumber": 1656716249,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Temp",
|
||||||
|
"Value": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 3,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 270
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 3,
|
||||||
|
"VariableNumber": 1654782546,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Merit",
|
||||||
|
"Value": 0.92
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 3,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "R",
|
||||||
|
"Value": 47
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 3,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Rs",
|
||||||
|
"Value": 1439.78
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 3,
|
||||||
|
"VariableNumber": 1656716248,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Avg",
|
||||||
|
"Value": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 3,
|
||||||
|
"VariableNumber": 1656716249,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Temp",
|
||||||
|
"Value": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 4,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 270
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 4,
|
||||||
|
"VariableNumber": 1654782546,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Merit",
|
||||||
|
"Value": 0.93
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 4,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "R",
|
||||||
|
"Value": 23
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 4,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Rs",
|
||||||
|
"Value": 1382.154
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 4,
|
||||||
|
"VariableNumber": 1656716248,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Avg",
|
||||||
|
"Value": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 4,
|
||||||
|
"VariableNumber": 1656716249,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Temp",
|
||||||
|
"Value": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 5,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 5,
|
||||||
|
"VariableNumber": 1654782546,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Merit",
|
||||||
|
"Value": 0.87
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 5,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "R",
|
||||||
|
"Value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 5,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Rs",
|
||||||
|
"Value": 1406.158
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 5,
|
||||||
|
"VariableNumber": 1656716248,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Avg",
|
||||||
|
"Value": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 5,
|
||||||
|
"VariableNumber": 1656716249,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Temp",
|
||||||
|
"Value": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 6,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 6,
|
||||||
|
"VariableNumber": 1654782546,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Merit",
|
||||||
|
"Value": 0.87
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 6,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "R",
|
||||||
|
"Value": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 6,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Rs",
|
||||||
|
"Value": 1394.458
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 6,
|
||||||
|
"VariableNumber": 1656716248,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Avg",
|
||||||
|
"Value": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 6,
|
||||||
|
"VariableNumber": 1656716249,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Temp",
|
||||||
|
"Value": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 7,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 7,
|
||||||
|
"VariableNumber": 1654782546,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Merit",
|
||||||
|
"Value": 0.85
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 7,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "R",
|
||||||
|
"Value": 35
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 7,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Rs",
|
||||||
|
"Value": 1387.965
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 7,
|
||||||
|
"VariableNumber": 1656716248,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Avg",
|
||||||
|
"Value": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 7,
|
||||||
|
"VariableNumber": 1656716249,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Temp",
|
||||||
|
"Value": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 8,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 8,
|
||||||
|
"VariableNumber": 1654782546,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Merit",
|
||||||
|
"Value": 0.98
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 8,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "R",
|
||||||
|
"Value": 59
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 8,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Rs",
|
||||||
|
"Value": 1411.158
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 8,
|
||||||
|
"VariableNumber": 1656716248,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Avg",
|
||||||
|
"Value": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 8,
|
||||||
|
"VariableNumber": 1656716249,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Temp",
|
||||||
|
"Value": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 9,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 9,
|
||||||
|
"VariableNumber": 1654782546,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Merit",
|
||||||
|
"Value": 0.88
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 9,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "R",
|
||||||
|
"Value": 83
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 9,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Rs",
|
||||||
|
"Value": 1413.722
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 9,
|
||||||
|
"VariableNumber": 1656716248,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Avg",
|
||||||
|
"Value": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 9,
|
||||||
|
"VariableNumber": 1656716249,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Temp",
|
||||||
|
"Value": 18.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 10,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 10,
|
||||||
|
"VariableNumber": 1654782546,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Merit",
|
||||||
|
"Value": 0.98
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 10,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "R",
|
||||||
|
"Value": 95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 10,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Rs",
|
||||||
|
"Value": 1401.816
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 10,
|
||||||
|
"VariableNumber": 1656716248,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Avg",
|
||||||
|
"Value": 1406.22
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 10,
|
||||||
|
"VariableNumber": 1656716249,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "Temp",
|
||||||
|
"Value": 18.2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 60
|
||||||
|
}
|
236
Server/Data/Tests/InfinityQSV2-GetDescriptors.json
Normal file
236
Server/Data/Tests/InfinityQSV2-GetDescriptors.json
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 0,
|
||||||
|
"VariableNumber": 1655312695,
|
||||||
|
"Variable": "Recipe",
|
||||||
|
"Value": "LSL8IN \\ 10PT_5mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 0,
|
||||||
|
"VariableNumber": 1656696777,
|
||||||
|
"Variable": "Layer",
|
||||||
|
"Value": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 0,
|
||||||
|
"VariableNumber": 1656696778,
|
||||||
|
"Variable": "Zone",
|
||||||
|
"Value": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 1,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Variable": "DataReject",
|
||||||
|
"Value": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 2,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Variable": "DataReject",
|
||||||
|
"Value": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 3,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Variable": "DataReject",
|
||||||
|
"Value": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 4,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Variable": "DataReject",
|
||||||
|
"Value": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 5,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Variable": "DataReject",
|
||||||
|
"Value": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 6,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Variable": "DataReject",
|
||||||
|
"Value": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 7,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Variable": "DataReject",
|
||||||
|
"Value": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 8,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Variable": "DataReject",
|
||||||
|
"Value": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 9,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Variable": "DataReject",
|
||||||
|
"Value": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 10,
|
||||||
|
"VariableNumber": 1656716039,
|
||||||
|
"Variable": "DataReject",
|
||||||
|
"Value": "3.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 1,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Variable": "Pt",
|
||||||
|
"Value": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 2,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Variable": "Pt",
|
||||||
|
"Value": "2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 3,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Variable": "Pt",
|
||||||
|
"Value": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 4,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Variable": "Pt",
|
||||||
|
"Value": "4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 5,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Variable": "Pt",
|
||||||
|
"Value": "5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 6,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Variable": "Pt",
|
||||||
|
"Value": "6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 7,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Variable": "Pt",
|
||||||
|
"Value": "7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 8,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Variable": "Pt",
|
||||||
|
"Value": "8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 9,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Variable": "Pt",
|
||||||
|
"Value": "9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 10,
|
||||||
|
"VariableNumber": 1656716040,
|
||||||
|
"Variable": "Pt",
|
||||||
|
"Value": "10"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 1,
|
||||||
|
"VariableNumber": 1656716042,
|
||||||
|
"Variable": "StdDev",
|
||||||
|
"Value": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 2,
|
||||||
|
"VariableNumber": 1656716042,
|
||||||
|
"Variable": "StdDev",
|
||||||
|
"Value": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 3,
|
||||||
|
"VariableNumber": 1656716042,
|
||||||
|
"Variable": "StdDev",
|
||||||
|
"Value": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 4,
|
||||||
|
"VariableNumber": 1656716042,
|
||||||
|
"Variable": "StdDev",
|
||||||
|
"Value": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 5,
|
||||||
|
"VariableNumber": 1656716042,
|
||||||
|
"Variable": "StdDev",
|
||||||
|
"Value": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 6,
|
||||||
|
"VariableNumber": 1656716042,
|
||||||
|
"Variable": "StdDev",
|
||||||
|
"Value": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 7,
|
||||||
|
"VariableNumber": 1656716042,
|
||||||
|
"Variable": "StdDev",
|
||||||
|
"Value": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 8,
|
||||||
|
"VariableNumber": 1656716042,
|
||||||
|
"Variable": "StdDev",
|
||||||
|
"Value": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 9,
|
||||||
|
"VariableNumber": 1656716042,
|
||||||
|
"Variable": "StdDev",
|
||||||
|
"Value": "1.23%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SiteNumber": 10,
|
||||||
|
"VariableNumber": 1656716042,
|
||||||
|
"Variable": "StdDev",
|
||||||
|
"Value": "1.23%"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 33
|
||||||
|
}
|
4
Server/Data/Tests/InfinityQSV2-GetEvents.json
Normal file
4
Server/Data/Tests/InfinityQSV2-GetEvents.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"Results": [],
|
||||||
|
"TotalRows": 0
|
||||||
|
}
|
20
Server/Data/Tests/InfinityQSV2-GetHeader.json
Normal file
20
Server/Data/Tests/InfinityQSV2-GetHeader.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"EventCount": 0,
|
||||||
|
"ControlLimitCount": 0,
|
||||||
|
"SpecLimitCount": 0,
|
||||||
|
"SubGroupId": 1677273357,
|
||||||
|
"SubGroupDateTime": 1677273300,
|
||||||
|
"SiteNumber": 1,
|
||||||
|
"VariableNumber": 1650647347,
|
||||||
|
"Process": "61",
|
||||||
|
"Job": "CDE5",
|
||||||
|
"Lot": "575908",
|
||||||
|
"Part": "5012",
|
||||||
|
"Variable": "T",
|
||||||
|
"Value": 270
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 1
|
||||||
|
}
|
78
Server/Data/Tests/InfinityQSV3-GetCommandText.sql
Normal file
78
Server/Data/Tests/InfinityQSV3-GetCommandText.sql
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
select case when iq.sl_loos is null then 0 else iq.sl_loos end +
|
||||||
|
case when iq.sl_uoos is null then 0 else iq.sl_uoos end +
|
||||||
|
iq.ev_count as iq_sum,
|
||||||
|
iq.sl_aflag,
|
||||||
|
iq.sl_loos,
|
||||||
|
iq.sl_uoos,
|
||||||
|
iq.se_sgrp,
|
||||||
|
iq.se_sgtm,
|
||||||
|
iq.se_tsno,
|
||||||
|
iq.td_test,
|
||||||
|
iq.pr_name,
|
||||||
|
iq.jd_name,
|
||||||
|
iq.pl_name,
|
||||||
|
iq.pd_name,
|
||||||
|
iq.td_name,
|
||||||
|
iq.se_val,
|
||||||
|
iq.sl_eflag,
|
||||||
|
iq.sl_scal,
|
||||||
|
iq.sl_sls,
|
||||||
|
iq.sl_usl
|
||||||
|
from (
|
||||||
|
select
|
||||||
|
se.f_sgrp se_sgrp,
|
||||||
|
se.f_sgtm se_sgtm,
|
||||||
|
se.f_tsno se_tsno,
|
||||||
|
se.f_val se_val,
|
||||||
|
pr.f_name pr_name,
|
||||||
|
jd.f_name jd_name,
|
||||||
|
pl.f_name pl_name,
|
||||||
|
pd.f_name pd_name,
|
||||||
|
td.f_test td_test,
|
||||||
|
td.f_name td_name,
|
||||||
|
sl.f_eflag sl_eflag,
|
||||||
|
sl.f_aflag sl_aflag,
|
||||||
|
sl.f_scal sl_scal,
|
||||||
|
sl.f_lsl sl_sls,
|
||||||
|
sl.f_usl sl_usl,
|
||||||
|
case when sl.f_aflag is null or sl.f_aflag = 0 then null else
|
||||||
|
case when round(se.f_val, sl.F_scal, 1) < sl.f_lsl then 1 else 0 end
|
||||||
|
end as sl_loos,
|
||||||
|
case when sl.f_aflag is null or sl.f_aflag = 0 then null else
|
||||||
|
case when round(se.f_val, sl.F_scal, 1) > sl.f_usl then 1 else 0 end
|
||||||
|
end as sl_uoos,
|
||||||
|
(select count(ev.f_evnt)
|
||||||
|
from [spcepiworld].[dbo].[evnt_inf] ev
|
||||||
|
where ev.f_prcs = pr.f_prcs
|
||||||
|
and ev.f_part = pd.f_part
|
||||||
|
and ev.f_sgtm = se.f_sgtm
|
||||||
|
) ev_count
|
||||||
|
from [spcepiworld].[dbo].[sgrp_ext] se
|
||||||
|
join [spcepiworld].[dbo].[prcs_dat] pr
|
||||||
|
on se.f_prcs = pr.f_prcs
|
||||||
|
join [spcepiworld].[dbo].[job_dat] jd
|
||||||
|
on se.f_job = jd.f_job
|
||||||
|
join [spcepiworld].[dbo].[part_lot] pl
|
||||||
|
on se.f_lot = pl.f_lot
|
||||||
|
join [spcepiworld].[dbo].[part_dat] pd
|
||||||
|
on se.f_part = pd.f_part
|
||||||
|
join [spcepiworld].[dbo].[test_dat] td
|
||||||
|
on se.f_test = td.f_test
|
||||||
|
left join [spcepiworld].[dbo].[spec_lim] sl
|
||||||
|
on se.f_part = sl.f_part
|
||||||
|
and se.f_test = sl.f_test
|
||||||
|
where se.f_flag = 0
|
||||||
|
and (sl.f_prcs is null or se.f_prcs = sl.f_prcs or sl.f_prcs = 0)
|
||||||
|
and se.f_sgrp = 1698497987
|
||||||
|
and pr.f_name = '61'
|
||||||
|
and pd.f_name = '5012'
|
||||||
|
and jd.f_name = 'CDE5'
|
||||||
|
and pl.f_name = '575908'
|
||||||
|
and dateadd(HH, -7, (dateadd(SS, convert(bigint, se.f_sgtm), '19700101'))) = '2023-02-24 15:15:00'
|
||||||
|
) as iq
|
||||||
|
order by iq.sl_loos + iq.sl_uoos + iq.ev_count desc,
|
||||||
|
iq.sl_aflag desc,
|
||||||
|
iq.se_sgrp,
|
||||||
|
iq.se_tsno,
|
||||||
|
iq.td_test
|
||||||
|
for json path
|
1023
Server/Data/Tests/InfinityQSV3-GetData.json
Normal file
1023
Server/Data/Tests/InfinityQSV3-GetData.json
Normal file
File diff suppressed because it is too large
Load Diff
152
Server/Data/Tests/InfinityQSV3-GetDescriptors.json
Normal file
152
Server/Data/Tests/InfinityQSV3-GetDescriptors.json
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 1,
|
||||||
|
"dd_dsgp": 1657291789,
|
||||||
|
"gd_name": "CondType",
|
||||||
|
"dd_name": "N"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 2,
|
||||||
|
"dd_dsgp": 1657291789,
|
||||||
|
"gd_name": "CondType",
|
||||||
|
"dd_name": "N"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 1,
|
||||||
|
"dd_dsgp": 1657291790,
|
||||||
|
"gd_name": "GLimit",
|
||||||
|
"dd_name": "2000.00 \u00B5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 2,
|
||||||
|
"dd_dsgp": 1657291790,
|
||||||
|
"gd_name": "GLimit",
|
||||||
|
"dd_name": "2000.00 \u00B5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 1,
|
||||||
|
"dd_dsgp": 1657296863,
|
||||||
|
"gd_name": "Model",
|
||||||
|
"dd_name": "PARALLEL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 2,
|
||||||
|
"dd_dsgp": 1657296863,
|
||||||
|
"gd_name": "Model",
|
||||||
|
"dd_name": "PARALLEL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 0,
|
||||||
|
"dd_dsgp": 1657296864,
|
||||||
|
"gd_name": "Pattern",
|
||||||
|
"dd_name": "ONEPT.PAT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 1,
|
||||||
|
"dd_dsgp": 1657296865,
|
||||||
|
"gd_name": "Phase",
|
||||||
|
"dd_name": "90.000"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 2,
|
||||||
|
"dd_dsgp": 1657296865,
|
||||||
|
"gd_name": "Phase",
|
||||||
|
"dd_name": "90.000"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 1,
|
||||||
|
"dd_dsgp": 1657296866,
|
||||||
|
"gd_name": "Plan",
|
||||||
|
"dd_name": "5PT MES"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 2,
|
||||||
|
"dd_dsgp": 1657296866,
|
||||||
|
"gd_name": "Plan",
|
||||||
|
"dd_name": "5PT MES"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 1,
|
||||||
|
"dd_dsgp": 1657296867,
|
||||||
|
"gd_name": "RampRate",
|
||||||
|
"dd_name": "2500"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 2,
|
||||||
|
"dd_dsgp": 1657296867,
|
||||||
|
"gd_name": "RampRate",
|
||||||
|
"dd_name": "2500"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 1,
|
||||||
|
"dd_dsgp": 1657296868,
|
||||||
|
"gd_name": "RhoMethod",
|
||||||
|
"dd_name": "ASTM: F723 - 82"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 2,
|
||||||
|
"dd_dsgp": 1657296868,
|
||||||
|
"gd_name": "RhoMethod",
|
||||||
|
"dd_name": "ASTM: F723 - 82"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 1,
|
||||||
|
"dd_dsgp": 1657296869,
|
||||||
|
"gd_name": "StartVoltage",
|
||||||
|
"dd_name": "-5.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 2,
|
||||||
|
"dd_dsgp": 1657296869,
|
||||||
|
"gd_name": "StartVoltage",
|
||||||
|
"dd_name": "-5.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 1,
|
||||||
|
"dd_dsgp": 1657296870,
|
||||||
|
"gd_name": "StopVoltage",
|
||||||
|
"dd_name": "-20.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 2,
|
||||||
|
"dd_dsgp": 1657296870,
|
||||||
|
"gd_name": "StopVoltage",
|
||||||
|
"dd_name": "-20.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 1,
|
||||||
|
"dd_dsgp": 1657296871,
|
||||||
|
"gd_name": "WaferSize",
|
||||||
|
"dd_name": "150.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sd_sgrp": 1698497987,
|
||||||
|
"sd_tsno": 2,
|
||||||
|
"dd_dsgp": 1657296871,
|
||||||
|
"gd_name": "WaferSize",
|
||||||
|
"dd_name": "150.00"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 21
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
<tr><td>44</td><td class='Productive'>Productive</td><td class='LoadedRDSCount1'>616747</td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>50</td><td class='Productive'>Productive</td><td class='LoadedRDSCount0'></td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>48</td><td class='Unscheduled Down'>Unscheduled Down</td><td class='LoadedRDSCount0'></td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>42</td><td class='Scheduled Down'>Scheduled Down</td><td class='LoadedRDSCount1'>616741</td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>40</td><td class='Unscheduled Down'>Unscheduled Down</td><td class='LoadedRDSCount1'>616740</td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>46</td><td class='Productive'>Productive</td><td class='LoadedRDSCount0'></td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>54</td><td class='Non-Scheduled'>Non-Scheduled</td><td class='LoadedRDSCount0'></td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr>
|
25
Server/Data/Tests/InfinityQSV3-GetHeader.json
Normal file
25
Server/Data/Tests/InfinityQSV3-GetHeader.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"iq_sum": 1,
|
||||||
|
"sl_aflag": 34,
|
||||||
|
"sl_loos": 0,
|
||||||
|
"sl_uoos": 1,
|
||||||
|
"se_sgrp": 1698497987,
|
||||||
|
"se_sgtm": 1698497973,
|
||||||
|
"se_tsno": 1,
|
||||||
|
"td_test": 1657240302,
|
||||||
|
"pr_name": "HGCV2",
|
||||||
|
"jd_name": "HGCV2",
|
||||||
|
"pl_name": "-",
|
||||||
|
"pd_name": "High",
|
||||||
|
"td_name": "RhoAvgMean",
|
||||||
|
"se_val": 12.66,
|
||||||
|
"sl_eflag": 42,
|
||||||
|
"sl_scal": 4,
|
||||||
|
"sl_sls": 12.379,
|
||||||
|
"sl_usl": 12.561
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 1
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
[{"ProcessMean":1.750000000000000e+001,"ProcessSigma":5.800000000000000e+000}]
|
1
Server/Data/Tests/OpenInsightV1-GetTencorRun.json
Normal file
1
Server/Data/Tests/OpenInsightV1-GetTencorRun.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
[{"RDS":"615071","AttachmentId":"43CA162D-A04B-4A37-90D7-83BABAF2D3AB","Slot":"*01","SumOfDefects":"100","Sort":"FAIL","InsertDate":"2023-10-30T18:48:57.617"},{"RDS":"615071","AttachmentId":"706C7D0E-4EC1-4042-9DAA-3D141532B6E1","Slot":"*04","SumOfDefects":"12","Sort":"PASS","InsertDate":"2023-10-30T18:48:57.623"},{"RDS":"615071","AttachmentId":"4CECFAC9-745E-4235-BAD9-BE57D1FB450E","Slot":"*11","SumOfDefects":"22","Sort":"PASS","InsertDate":"2023-10-30T18:48:57.627"},{"RDS":"615071","AttachmentId":"B62DE99D-2060-4627-A006-C5FA0DC779BE","Slot":"*17","SumOfDefects":"279","Sort":"FAIL","InsertDate":"2023-10-30T18:48:57.630"}]
|
4
Server/Data/Tests/Pin-GetPinnedTable.json
Normal file
4
Server/Data/Tests/Pin-GetPinnedTable.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"Results": [],
|
||||||
|
"TotalRows": 0
|
||||||
|
}
|
33
Server/Data/Tests/Reactors-GetReactors.json
Normal file
33
Server/Data/Tests/Reactors-GetReactors.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
20,
|
||||||
|
22,
|
||||||
|
24,
|
||||||
|
26,
|
||||||
|
28,
|
||||||
|
30,
|
||||||
|
32,
|
||||||
|
34,
|
||||||
|
36,
|
||||||
|
38,
|
||||||
|
40,
|
||||||
|
42,
|
||||||
|
44,
|
||||||
|
46,
|
||||||
|
48,
|
||||||
|
50,
|
||||||
|
52,
|
||||||
|
54,
|
||||||
|
56,
|
||||||
|
58,
|
||||||
|
60,
|
||||||
|
62,
|
||||||
|
64,
|
||||||
|
66,
|
||||||
|
68,
|
||||||
|
70,
|
||||||
|
72,
|
||||||
|
74
|
||||||
|
],
|
||||||
|
"TotalRows": 28
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
1
Server/Data/Tests/ToolTypes-GetData.json
Normal file
1
Server/Data/Tests/ToolTypes-GetData.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"Results":[{"InsertDate":null,"Run Header":null,"Title":null,"AttachmentID":null,"Position":"Average","Thickness":"NaN","ID":-1},{"InsertDate":null,"Run Header":null,"Title":null,"AttachmentID":null,"Position":"Std Dev","Thickness":"NaN","ID":-2}],"TotalRows":2}
|
93
Server/Data/Tests/ToolTypes-GetHeaderFields.json
Normal file
93
Server/Data/Tests/ToolTypes-GetHeaderFields.json
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"Column": "ID",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "InsertDate",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Title",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Recipe",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Date",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Operator",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Batch",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Cassette",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Wafer",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Mean Thickness",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "RV Thickness",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Status",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Std Dev",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "SentToOI",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "SentToSPC",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Reactor",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "RDS",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "PSN",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Path",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Layer",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Zone",
|
||||||
|
"Value": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Column": "Tool",
|
||||||
|
"Value": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 22
|
||||||
|
}
|
167982
Server/Data/Tests/ToolTypes-GetHeaderTitles.json
Normal file
167982
Server/Data/Tests/ToolTypes-GetHeaderTitles.json
Normal file
File diff suppressed because it is too large
Load Diff
1
Server/Data/Tests/ToolTypes-GetHeaders.json
Normal file
1
Server/Data/Tests/ToolTypes-GetHeaders.json
Normal file
File diff suppressed because one or more lines are too long
344
Server/Data/Tests/ToolTypes-GetToolTypeMetadata.json
Normal file
344
Server/Data/Tests/ToolTypes-GetToolTypeMetadata.json
Normal file
@ -0,0 +1,344 @@
|
|||||||
|
{
|
||||||
|
"Results": {
|
||||||
|
"ToolType": {
|
||||||
|
"ID": 1,
|
||||||
|
"ToolTypeName": "BioRad",
|
||||||
|
"HasHeaderAttachments": false,
|
||||||
|
"HasDataAttachments": false,
|
||||||
|
"HeaderTableName": "BioRadRunHeader",
|
||||||
|
"DataTableName": "BioRadRunData",
|
||||||
|
"ExportSPName": "Export_BioRad",
|
||||||
|
"HeaderGridAttributes": null,
|
||||||
|
"DataGridAttributes": "{ \u0022pinButton\u0022: true }",
|
||||||
|
"DataGridSortBy": "LEN(Position), Position",
|
||||||
|
"DataGridStatsColumn": "Thickness",
|
||||||
|
"DataGridStatsStdDevType": " ",
|
||||||
|
"DisplayHeaderAttachment": null,
|
||||||
|
"DisplayDataAttachment": null,
|
||||||
|
"OIExportSPName": "OIExport_BioRad"
|
||||||
|
},
|
||||||
|
"Metadata": [
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": false,
|
||||||
|
"ApiName": null,
|
||||||
|
"ColumnName": "ID",
|
||||||
|
"DisplayTitle": "ID",
|
||||||
|
"GridDisplayOrder": 3,
|
||||||
|
"GridAttributes": "{ \u0022dataType\u0022: \u0022number\u0022, \u0022hidden\u0022: \u0022true\u0022 }",
|
||||||
|
"TableDisplayOrder": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": false,
|
||||||
|
"ApiName": null,
|
||||||
|
"ColumnName": "InsertDate",
|
||||||
|
"DisplayTitle": "InsertDate",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": false,
|
||||||
|
"ApiName": "Position",
|
||||||
|
"ColumnName": "Position",
|
||||||
|
"DisplayTitle": "Position",
|
||||||
|
"GridDisplayOrder": 1,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": false,
|
||||||
|
"ApiName": "HeaderUniqueId",
|
||||||
|
"ColumnName": "Run Header",
|
||||||
|
"DisplayTitle": "Run Header",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": false,
|
||||||
|
"ApiName": "Thickness",
|
||||||
|
"ColumnName": "Thickness",
|
||||||
|
"DisplayTitle": "Thickness",
|
||||||
|
"GridDisplayOrder": 2,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": false,
|
||||||
|
"ApiName": "UniqueId",
|
||||||
|
"ColumnName": "Title",
|
||||||
|
"DisplayTitle": "Title",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Batch",
|
||||||
|
"ColumnName": "Batch",
|
||||||
|
"DisplayTitle": "Batch",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 7
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Cassette",
|
||||||
|
"ColumnName": "Cassette",
|
||||||
|
"DisplayTitle": "Cassette",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Date",
|
||||||
|
"ColumnName": "Date",
|
||||||
|
"DisplayTitle": "Date",
|
||||||
|
"GridDisplayOrder": 1,
|
||||||
|
"GridAttributes": "{ \u0022dataType\u0022: \u0022date\u0022, \u0022format\u0022: \u0022dateTime\u0022 }",
|
||||||
|
"TableDisplayOrder": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": null,
|
||||||
|
"ColumnName": "ID",
|
||||||
|
"DisplayTitle": "ID",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": null,
|
||||||
|
"ColumnName": "InsertDate",
|
||||||
|
"DisplayTitle": "InsertDate",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Layer",
|
||||||
|
"ColumnName": "Layer",
|
||||||
|
"DisplayTitle": "Layer",
|
||||||
|
"GridDisplayOrder": 6,
|
||||||
|
"GridAttributes": "{ \u0022formatter\u0022: \u0022isNull\u0022 }",
|
||||||
|
"TableDisplayOrder": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "MeanThickness",
|
||||||
|
"ColumnName": "Mean Thickness",
|
||||||
|
"DisplayTitle": "Mean Thickness",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Op",
|
||||||
|
"ColumnName": "Operator",
|
||||||
|
"DisplayTitle": "Operator",
|
||||||
|
"GridDisplayOrder": 8,
|
||||||
|
"GridAttributes": "{ \u0022formatter\u0022: \u0022isNull\u0022 }",
|
||||||
|
"TableDisplayOrder": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "FilePath",
|
||||||
|
"ColumnName": "Path",
|
||||||
|
"DisplayTitle": "Path",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 19
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "PSN",
|
||||||
|
"ColumnName": "PSN",
|
||||||
|
"DisplayTitle": "PSN",
|
||||||
|
"GridDisplayOrder": 5,
|
||||||
|
"GridAttributes": "{ \u0022formatter\u0022: \u0022isNull\u0022 }",
|
||||||
|
"TableDisplayOrder": 18
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "RDS",
|
||||||
|
"ColumnName": "RDS",
|
||||||
|
"DisplayTitle": "RDS",
|
||||||
|
"GridDisplayOrder": 4,
|
||||||
|
"GridAttributes": "{ \u0022formatter\u0022: \u0022isNull\u0022 }",
|
||||||
|
"TableDisplayOrder": 17
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Reactor",
|
||||||
|
"ColumnName": "Reactor",
|
||||||
|
"DisplayTitle": "Reactor",
|
||||||
|
"GridDisplayOrder": 3,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 16
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Recipe",
|
||||||
|
"ColumnName": "Recipe",
|
||||||
|
"DisplayTitle": "Recipe",
|
||||||
|
"GridDisplayOrder": 7,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "RVThickness",
|
||||||
|
"ColumnName": "RV Thickness",
|
||||||
|
"DisplayTitle": "RV Thickness",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "SentToMetrology",
|
||||||
|
"ColumnName": "SentToMetrology",
|
||||||
|
"DisplayTitle": "SentToOI",
|
||||||
|
"GridDisplayOrder": 10,
|
||||||
|
"GridAttributes": "{ \u0022dataType:\u0022: \u0022bool\u0022, \u0022formatter\u0022: \u0022boolToYesNo\u0022 }",
|
||||||
|
"TableDisplayOrder": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "SentToSPC",
|
||||||
|
"ColumnName": "SentToSPC",
|
||||||
|
"DisplayTitle": "SentToSPC",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": "{ \u0022dataType:\u0022: \u0022bool\u0022, \u0022formatter\u0022: \u0022boolToYesNo\u0022 }",
|
||||||
|
"TableDisplayOrder": 15
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "PassFail",
|
||||||
|
"ColumnName": "Status",
|
||||||
|
"DisplayTitle": "Status",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "StdDev",
|
||||||
|
"ColumnName": "Std Dev",
|
||||||
|
"DisplayTitle": "Std Dev",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 13
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "UniqueId",
|
||||||
|
"ColumnName": "Title",
|
||||||
|
"DisplayTitle": "Title",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Wafer",
|
||||||
|
"ColumnName": "Wafer",
|
||||||
|
"DisplayTitle": "Wafer",
|
||||||
|
"GridDisplayOrder": 9,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Zone",
|
||||||
|
"ColumnName": "Zone",
|
||||||
|
"DisplayTitle": "Zone",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 21
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": false,
|
||||||
|
"ApiName": null,
|
||||||
|
"ColumnName": "AttachmentID",
|
||||||
|
"DisplayTitle": "AttachmentID",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": null,
|
||||||
|
"ColumnName": "AttachmentID",
|
||||||
|
"DisplayTitle": "AttachmentID",
|
||||||
|
"GridDisplayOrder": 0,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Id",
|
||||||
|
"ColumnName": null,
|
||||||
|
"DisplayTitle": "Ignore",
|
||||||
|
"GridDisplayOrder": -1,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "Title",
|
||||||
|
"ColumnName": null,
|
||||||
|
"DisplayTitle": "Ignore",
|
||||||
|
"GridDisplayOrder": -1,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeID": 1,
|
||||||
|
"Header": true,
|
||||||
|
"ApiName": "CellName",
|
||||||
|
"ColumnName": "Tool",
|
||||||
|
"DisplayTitle": "Tool",
|
||||||
|
"GridDisplayOrder": 2,
|
||||||
|
"GridAttributes": null,
|
||||||
|
"TableDisplayOrder": 22
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"TotalRows": 32
|
||||||
|
}
|
33
Server/Data/Tests/ToolTypes-Index.json
Normal file
33
Server/Data/Tests/ToolTypes-Index.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"Results": [
|
||||||
|
{
|
||||||
|
"ToolTypeName": "BioRad",
|
||||||
|
"ID": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeName": "CDE",
|
||||||
|
"ID": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeName": "Tencor",
|
||||||
|
"ID": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeName": "MercuryProbe",
|
||||||
|
"ID": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeName": "StratusBioRad",
|
||||||
|
"ID": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeName": "TencorSP1",
|
||||||
|
"ID": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ToolTypeName": "SRP",
|
||||||
|
"ID": 7
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"TotalRows": 7
|
||||||
|
}
|
34
Server/Models/AppSettings.cs
Normal file
34
Server/Models/AppSettings.cs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.Models;
|
||||||
|
|
||||||
|
public record AppSettings(string ApiExportPath,
|
||||||
|
string ApiLoggingContentTypes,
|
||||||
|
string ApiLoggingPathPrefixes,
|
||||||
|
string ApiLogPath,
|
||||||
|
string ApiUrl,
|
||||||
|
string AttachmentPath,
|
||||||
|
string BuildNumber,
|
||||||
|
string Company,
|
||||||
|
string ConnectionString,
|
||||||
|
string GitCommitSeven,
|
||||||
|
string InboundApiAllowedIPList,
|
||||||
|
bool IsDevelopment,
|
||||||
|
bool IsStaging,
|
||||||
|
string MockRoot,
|
||||||
|
string MonAResource,
|
||||||
|
string MonASite,
|
||||||
|
string OI2SqlConnectionString,
|
||||||
|
string OpenInsightApplicationProgrammingInterface,
|
||||||
|
Dictionary<string, string> TableToPath,
|
||||||
|
string URLs,
|
||||||
|
string WorkingDirectoryName)
|
||||||
|
{
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
2
Server/Models/Binder/.editorconfig
Normal file
2
Server/Models/Binder/.editorconfig
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[*.cs]
|
||||||
|
csharp_preserve_single_line_statements = true
|
117
Server/Models/Binder/AppSettings.cs
Normal file
117
Server/Models/Binder/AppSettings.cs
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.Models.Binder;
|
||||||
|
|
||||||
|
public class AppSettings
|
||||||
|
{
|
||||||
|
|
||||||
|
public string? ApiExportPath { get; set; }
|
||||||
|
public string? ApiLoggingContentTypes { get; set; }
|
||||||
|
public string? ApiLoggingPathPrefixes { get; set; }
|
||||||
|
public string? ApiLogPath { get; set; }
|
||||||
|
public string? ApiUrl { get; set; }
|
||||||
|
public string? AttachmentPath { get; set; }
|
||||||
|
public string? BuildNumber { get; set; }
|
||||||
|
public string? Company { get; set; }
|
||||||
|
public string? ConnectionString { get; set; }
|
||||||
|
public string? GitCommitSeven { get; set; }
|
||||||
|
public string? InboundApiAllowedIPList { get; set; }
|
||||||
|
public bool? IsDevelopment { get; set; }
|
||||||
|
public bool? IsStaging { get; set; }
|
||||||
|
public string? MockRoot { get; set; }
|
||||||
|
public string? MonAResource { get; set; }
|
||||||
|
public string? MonASite { get; set; }
|
||||||
|
public string? Oi2SqlConnectionString { get; set; }
|
||||||
|
public string? OpenInsightApplicationProgrammingInterface { get; set; }
|
||||||
|
public Dictionary<string, string>? TableToPath { get; set; }
|
||||||
|
public string? URLs { get; set; }
|
||||||
|
public string? WorkingDirectoryName { get; set; }
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Models.AppSettings Get(AppSettings? appSettings)
|
||||||
|
{
|
||||||
|
Models.AppSettings result;
|
||||||
|
if (appSettings is null) throw new NullReferenceException(nameof(appSettings));
|
||||||
|
if (appSettings.ApiExportPath is null) throw new NullReferenceException(nameof(ApiExportPath));
|
||||||
|
if (appSettings.ApiLoggingContentTypes is null) throw new NullReferenceException(nameof(ApiLoggingContentTypes));
|
||||||
|
if (appSettings.ApiLoggingPathPrefixes is null) throw new NullReferenceException(nameof(ApiLoggingPathPrefixes));
|
||||||
|
if (appSettings.ApiLogPath is null) throw new NullReferenceException(nameof(ApiLogPath));
|
||||||
|
if (appSettings.ApiUrl is null) throw new NullReferenceException(nameof(ApiUrl));
|
||||||
|
if (appSettings.AttachmentPath is null) throw new NullReferenceException(nameof(AttachmentPath));
|
||||||
|
if (appSettings.BuildNumber is null) throw new NullReferenceException(nameof(BuildNumber));
|
||||||
|
if (appSettings.Company is null) throw new NullReferenceException(nameof(Company));
|
||||||
|
if (appSettings.ConnectionString is null) throw new NullReferenceException(nameof(ConnectionString));
|
||||||
|
if (appSettings.GitCommitSeven is null) throw new NullReferenceException(nameof(GitCommitSeven));
|
||||||
|
if (appSettings.InboundApiAllowedIPList is null) throw new NullReferenceException(nameof(InboundApiAllowedIPList));
|
||||||
|
if (appSettings.IsDevelopment is null) throw new NullReferenceException(nameof(IsDevelopment));
|
||||||
|
if (appSettings.IsStaging is null) throw new NullReferenceException(nameof(IsStaging));
|
||||||
|
if (appSettings.MockRoot is null) throw new NullReferenceException(nameof(MockRoot));
|
||||||
|
if (appSettings.MonAResource is null) throw new NullReferenceException(nameof(MonAResource));
|
||||||
|
if (appSettings.MonASite is null) throw new NullReferenceException(nameof(MonASite));
|
||||||
|
if (appSettings.Oi2SqlConnectionString is null) throw new NullReferenceException(nameof(Oi2SqlConnectionString));
|
||||||
|
if (appSettings.OpenInsightApplicationProgrammingInterface is null) throw new NullReferenceException(nameof(OpenInsightApplicationProgrammingInterface));
|
||||||
|
if (appSettings.URLs is null) throw new NullReferenceException(nameof(URLs));
|
||||||
|
if (appSettings.TableToPath is null) throw new NullReferenceException(nameof(TableToPath));
|
||||||
|
if (appSettings.WorkingDirectoryName is null) throw new NullReferenceException(nameof(WorkingDirectoryName));
|
||||||
|
result = new(
|
||||||
|
appSettings.ApiExportPath,
|
||||||
|
appSettings.ApiLoggingContentTypes,
|
||||||
|
appSettings.ApiLoggingPathPrefixes,
|
||||||
|
appSettings.ApiLogPath,
|
||||||
|
appSettings.ApiUrl,
|
||||||
|
appSettings.AttachmentPath,
|
||||||
|
appSettings.BuildNumber,
|
||||||
|
appSettings.Company,
|
||||||
|
appSettings.ConnectionString,
|
||||||
|
appSettings.GitCommitSeven,
|
||||||
|
appSettings.InboundApiAllowedIPList,
|
||||||
|
appSettings.IsDevelopment.Value,
|
||||||
|
appSettings.IsStaging.Value,
|
||||||
|
appSettings.MockRoot,
|
||||||
|
appSettings.MonAResource,
|
||||||
|
appSettings.MonASite,
|
||||||
|
appSettings.Oi2SqlConnectionString,
|
||||||
|
appSettings.OpenInsightApplicationProgrammingInterface,
|
||||||
|
appSettings.TableToPath,
|
||||||
|
appSettings.URLs,
|
||||||
|
appSettings.WorkingDirectoryName);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Models.AppSettings Get(IConfigurationRoot configurationRoot)
|
||||||
|
{
|
||||||
|
Models.AppSettings result;
|
||||||
|
#pragma warning disable IL3050, IL2026
|
||||||
|
AppSettings? appSettings = configurationRoot.Get<AppSettings>();
|
||||||
|
#pragma warning restore IL3050, IL2026
|
||||||
|
if (appSettings?.ApiExportPath is null)
|
||||||
|
{
|
||||||
|
foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers)
|
||||||
|
{
|
||||||
|
if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider)
|
||||||
|
continue;
|
||||||
|
if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider)
|
||||||
|
continue;
|
||||||
|
if (!physicalFileProvider.Root.Contains("UserSecrets"))
|
||||||
|
continue;
|
||||||
|
throw new NotSupportedException(physicalFileProvider.Root);
|
||||||
|
}
|
||||||
|
throw new NotSupportedException("Not found!");
|
||||||
|
}
|
||||||
|
result = Get(appSettings);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||||
|
[JsonSerializable(typeof(AppSettings))]
|
||||||
|
internal partial class BinderAppSettingsSourceGenerationContext : JsonSerializerContext
|
||||||
|
{
|
||||||
|
}
|
147
Server/OI.Metrology.Server.csproj
Normal file
147
Server/OI.Metrology.Server.csproj
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<SccProjectName>SAK</SccProjectName>
|
||||||
|
<SccProvider>SAK</SccProvider>
|
||||||
|
<SccAuxPath>SAK</SccAuxPath>
|
||||||
|
<SccLocalPath>SAK</SccLocalPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<UserSecretsId>b0a3891c-b775-422c-80ee-63a2f385045d</UserSecretsId>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="logs\**" />
|
||||||
|
<Content Remove="logs\**" />
|
||||||
|
<EmbeddedResource Remove="logs\**" />
|
||||||
|
<None Remove="logs\**" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Remove="compilerconfig.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Dapper" Version="2.1.4" />
|
||||||
|
<PackageReference Include="EntityFramework" Version="6.4.4" />
|
||||||
|
<PackageReference Include="jQuery" Version="3.7.1" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="7.0.13" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="7.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.1" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="7.0.0" />
|
||||||
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
||||||
|
<PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
|
||||||
|
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Shared\OI.Metrology.Shared.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="moves\" />
|
||||||
|
<Folder Include="wwwroot\images\" />
|
||||||
|
<Folder Include="wwwroot\styles\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="compilerconfig.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Data\Mike\service-shop.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\AppSettings-GetAppSettings.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\AppSettings-GetBuildNumberAndGitCommitSeven.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\ClientSettings-GetClientSettings.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\ClientSettings-GetIpAddress.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\Export-GetExport.txt">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\Export-GetHeaders.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\Export-GetLogistics.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\Export-GetProcessDataStandardFormat.pdsf">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQS-GetCommandText.sql">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQSV2-GetCommandText.sql">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQSV2-GetData.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQSV2-GetDescriptors.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQSV2-GetEvents.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQSV2-GetHeader.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQSV3-GetData.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQSV3-GetDescriptors.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQSV3-GetEpiProTempVerification.html">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQSV3-GetHeader.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\InfinityQSV3-GetProductDataAverageSumOfDefectsProcessMeanProcessSigma.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\OpenInsightV1-GetTencorRun.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\Pin-GetPinnedTable.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\Reactors-GetReactors.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\ServiceShopOrder-GetAllServiceShopOrders.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\ToolTypes-GetData.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\ToolTypes-GetHeaderFields.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\ToolTypes-GetHeaders.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\ToolTypes-GetHeaderTitles.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\ToolTypes-GetToolTypeMetadata.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="Data\Tests\ToolTypes-Index.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -1,22 +1,16 @@
|
|||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using Microsoft.Extensions.Hosting;
|
|
||||||
using Microsoft.Extensions.Hosting.WindowsServices;
|
using Microsoft.Extensions.Hosting.WindowsServices;
|
||||||
using Microsoft.Extensions.Logging;
|
using OI.Metrology.Server.Models;
|
||||||
|
using OI.Metrology.Server.Repositories;
|
||||||
|
using OI.Metrology.Server.Repository;
|
||||||
|
using OI.Metrology.Server.Services;
|
||||||
using OI.Metrology.Shared.Models;
|
using OI.Metrology.Shared.Models;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
using OI.Metrology.Shared.Repositories;
|
using OI.Metrology.Shared.Repositories;
|
||||||
using OI.Metrology.Shared.Services;
|
using OI.Metrology.Shared.Services;
|
||||||
using OI.Metrology.Viewer.Models;
|
|
||||||
using OI.Metrology.Viewer.Repositories;
|
|
||||||
using OI.Metrology.Viewer.Services;
|
|
||||||
using Serilog;
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace OI.Metrology.Viewer;
|
namespace OI.Metrology.Server;
|
||||||
|
|
||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
@ -25,7 +19,7 @@ public class Program
|
|||||||
{
|
{
|
||||||
string webRootPath;
|
string webRootPath;
|
||||||
Assembly assembly = Assembly.GetExecutingAssembly();
|
Assembly assembly = Assembly.GetExecutingAssembly();
|
||||||
string assemblyName = assembly.GetName()?.Name;
|
string? assemblyName = assembly.GetName()?.Name;
|
||||||
if (string.IsNullOrEmpty(assemblyName))
|
if (string.IsNullOrEmpty(assemblyName))
|
||||||
throw new Exception();
|
throw new Exception();
|
||||||
string baseAssemblyName = assemblyName.Split('.')[0];
|
string baseAssemblyName = assemblyName.Split('.')[0];
|
||||||
@ -46,31 +40,48 @@ public class Program
|
|||||||
|
|
||||||
public static int Main(string[] args)
|
public static int Main(string[] args)
|
||||||
{
|
{
|
||||||
LoggerConfiguration loggerConfiguration = new();
|
ILogger<Program>? logger = null;
|
||||||
(string assemblyName, WebApplicationOptions _) = Get(args);
|
(string assemblyName, WebApplicationOptions _) = Get(args);
|
||||||
WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
|
WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
|
||||||
_ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
|
_ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
|
||||||
AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration);
|
AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration);
|
||||||
|
if (string.IsNullOrEmpty(appSettings.Company))
|
||||||
|
throw new Exception("Company name must have a value!");
|
||||||
if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName))
|
if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName))
|
||||||
throw new Exception("Working directory name must have a value!");
|
throw new Exception("Working directory name must have a value!");
|
||||||
string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assemblyName, appSettings.WorkingDirectoryName);
|
string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assemblyName, appSettings.WorkingDirectoryName);
|
||||||
Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory);
|
Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory);
|
||||||
_ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, webApplicationBuilder.Configuration);
|
|
||||||
_ = SerilogHostBuilderExtensions.UseSerilog(webApplicationBuilder.Host);
|
|
||||||
Log.Logger = loggerConfiguration.CreateLogger();
|
|
||||||
Serilog.ILogger log = Log.ForContext<Program>();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
_ = webApplicationBuilder.Services.AddMemoryCache();
|
||||||
_ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);
|
_ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);
|
||||||
_ = webApplicationBuilder.Services.AddControllersWithViews();
|
_ = webApplicationBuilder.Services.AddControllersWithViews();
|
||||||
_ = new MetrologyRepo(new SQLDbConnectionFactory(appSettings), null);
|
|
||||||
_ = webApplicationBuilder.Services.AddDistributedMemoryCache();
|
_ = webApplicationBuilder.Services.AddDistributedMemoryCache();
|
||||||
_ = webApplicationBuilder.Services.AddMemoryCache();
|
|
||||||
_ = webApplicationBuilder.Services.AddSingleton<AppSettings, AppSettings>(_ => appSettings);
|
AppSettingsRepository appSettingsRepository = new(appSettings);
|
||||||
|
SQLDbConnectionFactory sqlDbConnectionFactory = new(appSettings);
|
||||||
|
ClientSettingsRepository clientSettingsRepository = new(appSettings);
|
||||||
|
|
||||||
|
_ = webApplicationBuilder.Services.AddHttpClient();
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton(_ => appSettings);
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<IPinRepository, PinRepository>();
|
||||||
|
_ = webApplicationBuilder.Services.AddScoped<IExportRepository, ExportRepository>();
|
||||||
_ = webApplicationBuilder.Services.AddScoped<IAttachmentsService, AttachmentsService>();
|
_ = webApplicationBuilder.Services.AddScoped<IAttachmentsService, AttachmentsService>();
|
||||||
_ = webApplicationBuilder.Services.AddScoped<IInboundDataService, InboundDataService>();
|
_ = webApplicationBuilder.Services.AddScoped<IInboundDataService, InboundDataService>();
|
||||||
_ = webApplicationBuilder.Services.AddScoped<IMetrologyRepo, MetrologyRepo>();
|
_ = webApplicationBuilder.Services.AddSingleton<IInboundRepository, InboundRepository>();
|
||||||
_ = webApplicationBuilder.Services.AddSingleton<IDbConnectionFactory, SQLDbConnectionFactory>();
|
_ = webApplicationBuilder.Services.AddScoped<IMetrologyRepository, MetrologyRepository>();
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<IReactorsRepository, ReactorsRepository>();
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<IToolTypesRepository, ToolTypesRepository>();
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<IInfinityQSRepository, InfinityQSRepository>();
|
||||||
|
_ = webApplicationBuilder.Services.AddScoped<IOpenInsightV1Repository, OpenInsightV1Repository>();
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<IInfinityQSV2Repository, InfinityQSV2Repository>();
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<IInfinityQSV3Repository, InfinityQSV3Repository>();
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<IClientSettingsRepository>(_ => clientSettingsRepository);
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<IServiceShopOrderRepository, ServiceShopOrderRepository>();
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<ISpreadingResistanceProfileService, SpreadingResistanceProfileService>();
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<IDbConnectionFactory, SQLDbConnectionFactory>(_ => sqlDbConnectionFactory);
|
||||||
|
_ = webApplicationBuilder.Services.AddSingleton<IAppSettingsRepository<Models.Binder.AppSettings>>(_ => appSettingsRepository);
|
||||||
|
|
||||||
_ = webApplicationBuilder.Services.AddSwaggerGen();
|
_ = webApplicationBuilder.Services.AddSwaggerGen();
|
||||||
_ = webApplicationBuilder.Services.AddSession(sessionOptions =>
|
_ = webApplicationBuilder.Services.AddSession(sessionOptions =>
|
||||||
{
|
{
|
||||||
@ -84,14 +95,19 @@ public class Program
|
|||||||
_ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
|
_ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
|
||||||
_ = webApplicationBuilder.Logging.AddEventLog(settings =>
|
_ = webApplicationBuilder.Logging.AddEventLog(settings =>
|
||||||
{
|
{
|
||||||
|
#pragma warning disable CA1416
|
||||||
if (string.IsNullOrEmpty(settings.SourceName))
|
if (string.IsNullOrEmpty(settings.SourceName))
|
||||||
settings.SourceName = webApplicationBuilder.Environment.ApplicationName;
|
settings.SourceName = webApplicationBuilder.Environment.ApplicationName;
|
||||||
|
#pragma warning restore
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
WebApplication webApplication = webApplicationBuilder.Build();
|
WebApplication webApplication = webApplicationBuilder.Build();
|
||||||
|
logger = webApplication.Services.GetRequiredService<ILogger<Program>>();
|
||||||
|
_ = webApplication.UseCors(corsPolicyBuilder => corsPolicyBuilder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
|
||||||
if (!webApplicationBuilder.Environment.IsDevelopment())
|
if (!webApplicationBuilder.Environment.IsDevelopment())
|
||||||
{
|
{
|
||||||
_ = webApplication.UseExceptionHandler("/Error");
|
_ = webApplication.UseExceptionHandler("/Error");
|
||||||
|
_ = webApplication.UseHttpsRedirection();
|
||||||
_ = webApplication.UseHsts();
|
_ = webApplication.UseHsts();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -102,29 +118,23 @@ public class Program
|
|||||||
webApplication.Lifetime.StopApplication();
|
webApplication.Lifetime.StopApplication();
|
||||||
}
|
}
|
||||||
_ = webApplication.UseSwagger();
|
_ = webApplication.UseSwagger();
|
||||||
_ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Viewer V1"));
|
_ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Server V1"));
|
||||||
}
|
}
|
||||||
_ = webApplication.Lifetime.ApplicationStopped.Register(Log.CloseAndFlush);
|
|
||||||
_ = ApplicationBuilderSerilogClientExtensions.UseSerilogIngestion(webApplication);
|
|
||||||
_ = SerilogApplicationBuilderExtensions.UseSerilogRequestLogging(webApplication);
|
|
||||||
_ = webApplication.UseFileServer(enableDirectoryBrowsing: true);
|
_ = webApplication.UseFileServer(enableDirectoryBrowsing: true);
|
||||||
_ = webApplication.UseStaticFiles();
|
_ = webApplication.UseStaticFiles();
|
||||||
_ = webApplication.UseSession();
|
_ = webApplication.UseSession();
|
||||||
_ = webApplication.UseHttpsRedirection();
|
|
||||||
_ = webApplication.UseMiddleware<ApiLoggingMiddleware>();
|
_ = webApplication.UseMiddleware<ApiLoggingMiddleware>();
|
||||||
_ = webApplication.MapControllers();
|
_ = webApplication.MapControllers();
|
||||||
log.Information("Starting Web Application");
|
logger.LogInformation("Starting Web Application");
|
||||||
webApplication.Run();
|
webApplication.Run();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
log.Fatal(ex, "Host terminated unexpectedly");
|
try
|
||||||
return 1;
|
{ logger?.LogCritical(ex, "Host terminated unexpectedly"); }
|
||||||
}
|
catch (Exception) { }
|
||||||
finally
|
throw;
|
||||||
{
|
|
||||||
Log.CloseAndFlush();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
31
Server/Properties/launchSettings.json
Normal file
31
Server/Properties/launchSettings.json
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"profiles": {
|
||||||
|
"http": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": false,
|
||||||
|
"applicationUrl": "http://localhost:5126",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"https": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": false,
|
||||||
|
"applicationUrl": "https://localhost:7130;http://localhost:5126",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"https-prod": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": false,
|
||||||
|
"applicationUrl": "https://localhost:7130;http://localhost:5126",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Production"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
58
Server/Repositories/AppSettingsRepository.cs
Normal file
58
Server/Repositories/AppSettingsRepository.cs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
using OI.Metrology.Server.Models;
|
||||||
|
using OI.Metrology.Shared.Models.Stateless;
|
||||||
|
|
||||||
|
namespace OI.Metrology.Server.Repository;
|
||||||
|
|
||||||
|
public class AppSettingsRepository : IAppSettingsRepository<Models.Binder.AppSettings>
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly AppSettings _AppSettings;
|
||||||
|
|
||||||
|
public AppSettingsRepository(AppSettings appSettings) => _AppSettings = appSettings;
|
||||||
|
|
||||||
|
internal Models.Binder.AppSettings GetAppSettings()
|
||||||
|
{
|
||||||
|
Models.Binder.AppSettings result = new()
|
||||||
|
{
|
||||||
|
BuildNumber = _AppSettings.BuildNumber,
|
||||||
|
Company = _AppSettings.Company,
|
||||||
|
GitCommitSeven = _AppSettings.GitCommitSeven,
|
||||||
|
IsDevelopment = _AppSettings.IsDevelopment,
|
||||||
|
IsStaging = _AppSettings.IsStaging,
|
||||||
|
};
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
Models.Binder.AppSettings IAppSettingsRepository<Models.Binder.AppSettings>.GetAppSettings() => GetAppSettings();
|
||||||
|
|
||||||
|
internal string GetBuildNumberAndGitCommitSeven()
|
||||||
|
{
|
||||||
|
string result = string.Concat(_AppSettings.BuildNumber, '-', _AppSettings.GitCommitSeven);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void VerifyConnectionStrings()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(_AppSettings.ConnectionString))
|
||||||
|
throw new NotSupportedException();
|
||||||
|
if (string.IsNullOrEmpty(_AppSettings.OI2SqlConnectionString))
|
||||||
|
throw new NotSupportedException();
|
||||||
|
#if DEBUG
|
||||||
|
if (!_AppSettings.ConnectionString.Contains("test", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
throw new NotSupportedException();
|
||||||
|
if (!_AppSettings.OI2SqlConnectionString.Contains("test", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
throw new NotSupportedException();
|
||||||
|
#endif
|
||||||
|
#if !DEBUG
|
||||||
|
if (_AppSettings.ConnectionString.Contains("test", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
throw new NotSupportedException();
|
||||||
|
if (_AppSettings.OI2SqlConnectionString.Contains("test", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
throw new NotSupportedException();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
string IAppSettingsRepository<Models.Binder.AppSettings>.GetBuildNumberAndGitCommitSeven() => GetBuildNumberAndGitCommitSeven();
|
||||||
|
|
||||||
|
void IAppSettingsRepository<Models.Binder.AppSettings>.VerifyConnectionStrings() => VerifyConnectionStrings();
|
||||||
|
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user