This commit is contained in:
Roman Shevchenko
2016-09-23 17:17:24 +03:00
parent 436bb8affc
commit 667a9e72a7
4 changed files with 47 additions and 11 deletions
+2
View File
@@ -10,6 +10,8 @@ apply plugin: 'kotlin'
repositories { jcenter() }
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.+"
compile "org.apache.logging.log4j:log4j-api:2.+"
runtime "org.apache.logging.log4j:log4j-core:2.+"
testCompile "junit:junit:4.+"
testCompile "org.assertj:assertj-core:3.+"
}
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
@@ -16,6 +16,7 @@
package com.intellij.updater.mock
import com.sun.net.httpserver.HttpServer
import org.apache.logging.log4j.LogManager
import java.net.HttpURLConnection.*
import java.net.InetSocketAddress
import java.net.URI
@@ -24,6 +25,7 @@ import java.time.format.DateTimeFormatter
class Server(private val port: Int, private val generator: Generator) {
private val server = HttpServer.create()
private val log = LogManager.getLogger(Server::class.java)
private val buildFormat = "([A-Z]+)-([0-9.]+)".toRegex()
private val tsFormat = DateTimeFormatter.ofPattern("dd/MMM/yyyy:kk:mm:ss ZZ")
@@ -35,18 +37,23 @@ class Server(private val port: Int, private val generator: Generator) {
process(ex.requestMethod, ex.requestURI)
}
catch(e: Exception) {
e.printStackTrace()
log.error(e)
Response(HTTP_INTERNAL_ERROR, "Internal error")
}
val contentType = if (response.type.startsWith("text/")) response.type + "; charset=utf-8" else response.type
ex.responseHeaders.add("Content-Type", contentType)
ex.sendResponseHeaders(response.code, response.bytes.size.toLong())
ex.responseBody.write(response.bytes)
ex.close()
try {
val contentType = if (response.type.startsWith("text/")) "${response.type}; charset=utf-8" else response.type
ex.responseHeaders.add("Content-Type", contentType)
ex.sendResponseHeaders(response.code, response.bytes.size.toLong())
ex.responseBody.write(response.bytes)
ex.close()
println("${ex.remoteAddress.address.hostAddress} - - [${tsFormat.format(ZonedDateTime.now())}]" +
" \"${ex.requestMethod} ${ex.requestURI}\" ${ex.responseCode} ${response.bytes.size}")
log.info("${ex.remoteAddress.address.hostAddress} - - [${tsFormat.format(ZonedDateTime.now())}]" +
" \"${ex.requestMethod} ${ex.requestURI}\" ${ex.responseCode} ${response.bytes.size}")
}
catch(e: Exception) {
log.error(e)
}
}
server.start()
@@ -15,13 +15,24 @@
*/
package com.intellij.updater.mock
import org.apache.logging.log4j.LogManager
fun main(args: Array<String>) {
if (args.size != 1) {
println("usage: java -jar update-server-mock.jar <port>")
System.exit(1)
}
val port = args[0].toInt()
val generator = Generator()
Server(port, generator).start()
val log = LogManager.getLogger(Server::class.java)
val port = args[0]
try {
log.info("starting the server on port '$port' ...")
val generator = Generator()
Server(port.toInt(), generator).start()
log.info("ready")
}
catch(e: Exception) {
log.error("failed to start the server", e)
System.exit(2)
}
}