Wednesday, 13 March 2024

Identifying invalid resx files in web project

Recently I needed to do a bit of cleanup as in one project after many UI changes, where we moved or changed structure of pages, were left resource files which no longer had corresponding page or user control. 

Nobody likes doing such cleanup manually so I come up with short powershell script which went though individual resource files and try to identify if it is still needed or not.

Explanation:

  1. Find all files in folder with local resources (e.g. workflow.aspx.en-US.resx)
  2. For each file remove the suffix e.g. en-US.resx
  3. Remove the subdirectory from name in order to get name of the page worflow.aspx
  4. Get each file just once (there can be multiple language mutations)
  5. Check if the file exists
  6. Write out only those where the file was not found

$res_location = "./App_LocalResources/"
Get-ChildItem -Path $res_location -Name 
| ForEach-Object -Process {"$res_location$_" -ireplace "(.[a-z]{2}-[a-z]{2})?.resx",""} 
| ForEach-Object -Process {$_.Replace($res_location, "")} 
| Get-Unique 
| ForEach-Object -Process {Write-Output "$_ $(Test-Path $_ -PathType Leaf)"} 
| where { $_ -match "False" }

Thursday, 23 April 2020

Jenkins service reinstall

I have not investigated more but it seems Jenkins does not like Java update. Sometimes the windows service fails to start. The simplest seems to remove it and install again...

sc delete jenkinsslave-D__Jenkins

Monday, 24 February 2020

Images used in web project

I am doing little clean-up in the project. Need to identify what images are still used and the rest I would like to remove. This PowerShell script helps to identify images which are used in any page, user control or c# code.

For each in the application is executed command which tries to find its name in all files matching given pattern.


@(Get-ChildItem 'D:\WebApp\images') | 
    ForEach-Object { 
        $_.name | Write-Host -NoNewline
        Write-Host ' ' -NoNewline
        
        dir 'D:\WebApp' -I *.aspx,*.ascx,*.cs,*.master -R | 
            Select-String $_.name -Quiet | where  {$_ -eq $true} | Write-Host -NoNewline
        
        Write-Host #writes a new line
    }

Friday, 20 July 2018

Moving SonarQube to other server

At first I had SonarQube installed together with Jenkins on the same server. SonarQube is quite resource demanding and it was causing slowness of the other jobs / tasks running on Jenkins.

Moving to other instance was simple as installing SonarQube on other server and configuring Jenkins to use new SonarQube instance.

Steps required

  • Java runtime environment
  • SonarQube binaries
  • MSSQL JDBC driver (make sure you get sqljdbc_auth.dll available on PATH)
  • SonarQube configuration was copied from old server to new (sonarqube/conf/*)
  • SonarQube instance was registered as service and started. 
  • Once the service is running then try to access it in browser, if it is not accessible then check logs (sonarqube/logs) and resolve.
  • Once the web is up and running there had to be installed language plugins again. 
  • Jenkins configuration have to be updated with new SonarQube url (Manage Jenkins > Configure System)

Thursday, 3 May 2018

SonarQube AD authentication setup

User in SonarQube can be validated against ActiveDirectory, once the user is validated it will be automatically created which is useful if there are a lot users who are required to use the tool.

  1. LDAP plugin needs to be installed in SonarQube marketplace
  2. sonar.properties needs to be updated with LDAP configuration details
  3. SonarQube service needs to be restarted. 
  4. Go to SonarQube web. 
    • If there are issues with the configuration check the logs (SonarQube\logs\web.log)
# LDAP configuration
# General Configuration
sonar.security.realm=LDAP
sonar.authenticator.createUsers=true
ldap.url=ldap://ldapserver:389
ldap.bindDn=CN=username,CN=Users,DC=domain,DC=company,DC=com
ldap.bindPassword=password

# User Configuration
ldap.user.baseDn=DC=domain,DC=company,DC=com
ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

ADExplorer is useful to confirm AD object properties and validate the server address and credentials.
In case it is not clear what are AD server details then use guidance on SO.
More details can be found in SonarQube LDAP plugin documentation.

Wednesday, 2 May 2018

SonarQube MSSQL backend setup


  1. Create Database
    • CREATE DATABASE "sonar" COLLATE Latin1_General_CS_AS 
      • It needs to be case and accent sensitive
    • Create user and add permissions to user so tables can be created with SonarQube start
  2. Modify SonarQube configuration to point out to database created
    • Go to SonarQube\conf\sonar.properties and follow instructions in the file
      • Uncomment and change connection string e.g. sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar;integratedSecurity=true
      • In case there is not used integrated also specify sonar.jdbc.username and sonar.jdbc.password
  3. In case there is used integrated connection to database used then download Microsoft JDBC driver, unzip and somewhere to the system PATH place sqljdbc_auth.dll (either 32 or 64 bit based on your operating system)
  4. Restart SonarQube instance.

Monday, 28 August 2017

Retrieving binary data from base64 node in xml variable

In case there is xml document with base64 encoded binary data e.g. PDF (below example has the binary data shortened)

declare @doc xml
set @doc = '<doc><PdfData>JVBERi0xLjQN</PdfData></doc>'
then there is very simple to get the binary data decoded as binary again
select CAST (@doc.value('(//PdfData/text())[1]', 'varbinary(max)') AS varchar(max))

https://stackoverflow.com/questions/5082345/base64-encoding-in-sql-server-2005-t-sql